编程
文章平均质量分 84
xingwangc2014
这个作者很懒,什么都没留下…
展开
-
使用Go构建RESTful的JSON API
这篇文章不仅仅讨论如何使用Go构建RESTful的JSON API,同时也会讨论如何设计好的RESTful API。如果你曾经遭遇了未遵循良好设计的API,那么你最终将写烂代码来使用这些垃圾API。希望阅读这篇文章后,你能够对好的API应该是怎样的有更多的认识。JSON API是啥?在JSO翻译 2016-06-09 23:18:30 · 35343 阅读 · 4 评论 -
[译] Go内存模型
The Go Memory ModelThe Go Memory ModelIntroductionGo的内存模型指定了一个数据共享、可见条件,这个条件保证在一个goroutine中写入一个数据,另外的goroutine对相同的数据读取时可见。Advice程序对多个goroutines同时访问的数据的修改,必须序列化对该数据的访问(包括读和写)。要对数据进行序列化访问,可以使用chann...翻译 2018-11-05 00:03:23 · 629 阅读 · 0 评论 -
[译]Go调度器
The Go SchedulerThe Go scheduler译者注:本文提到的P(processor)虽然数量上与CPU核数相等,但它并不完全等同于CPU的processor,严格意义上,它应该是一个包含CPU核信息以及一些其他信息,如goroutine runqueue信息等的数据结构或调度器。所以本文都使用上下文指代它(原文中为context)。介绍Go1.1提供的一个大功能之...翻译 2018-11-03 23:30:12 · 336 阅读 · 0 评论 -
[译]城里新来的孩子——Go的sync.Map
原文地址:The new kid in town — Go’s sync.Map对Go1.9中新加入的类型sync.Map的学习和探索性分析。Go1.9出来后,我就迫不及待的开始尝试接触sync包中新加入的sync.Map容器了。首先,为什么要将它加入到标准库中?它又应该在哪里使用?不幸的是,答案是:除非遇到后面两种情况你真的不需要使用它。a). 你已经在使用常规的类型安全的map的应用程...翻译 2018-04-01 14:07:38 · 5386 阅读 · 1 评论 -
[原]可能被忽略的Golang细节——range
range关键字是Go语言中一个非常有用的迭代array,slice,map, string, channel中元素的内置关键字。range的使用range的使用非常简单,对于遍历array,*array,string它返回两个值分别是数据的索引和值,遍历map时返回的两个值分别是key和value,遍历channel时,则只有一个返回数据。各种类型的返回值参考下表: rang...原创 2018-04-01 14:03:07 · 9118 阅读 · 1 评论 -
goroutine退出方式的总结
goroutine的退出机制大家都知道goroutine是Go语言并发的利器,通过goroutine我们可以很容易的编写高并发的程序。但是goroutine设计的退出机制是由goroutine自己退出,不能在外部强制结束一个正在执行的goroutine(只有一种情况正在运行的goroutine会因为其他goroutine的结束被终止,就是main函数退出或程序停止执行)。关于goroutine原创 2018-01-07 23:26:25 · 19678 阅读 · 3 评论 -
[译]defer, panic, recover
原文地址:Defer, Panic, and RecoverGo有普通的流程控制机制:if, for, switch, goto等。它还有Go特有的语句来在单独的goroutine中执行程序。在这里我想讨论一些不太常见的特性:defer, panic和recover。deferdefer语句将一个函数调用压入到一个列表中。列表中存储的函数调用,将在执行defer语句的外围函数返回后翻译 2018-01-07 23:24:23 · 361 阅读 · 0 评论 -
[译]Go并发模式:context
原文地址: Go Concurrency Patterns: ContextIntroduction在Go server中,新的请求通常都会起一个新的goroutine处理,这个goroutine又通常会起一些额外的goroutines来访问后端,例如database,RPC服务等。这一系列处理一个请求的goroutines通常需要访问请求相关的数据,例如最终用户的身份,Authorization翻译 2018-01-02 23:21:21 · 1574 阅读 · 0 评论 -
Go 交叉编译
Go交叉编译Go在1.5版本中改进了对交叉编译的支持,包括统一了编译器、链接器等。使得跨平台交叉编译相当简单,一条命令即能轻松搞定。原创 2017-03-22 22:39:45 · 8118 阅读 · 1 评论 -
Go语言如何在不牺牲运行时性能的情况下提高表达性
今天看了一篇很有趣的博文,讲使用Go写代码时。对于更新数组,一个小小的改动却能大大提高代码的效率。而自己平时最经常使用的居然是效率最低的一种方式。不得不感慨Go虽然入门容易,但是像C一样也是博大精深,细节无处不在,平时需要注意的地方,需要深挖的地方太多太多。这里把文章翻译撸一下给大家分享下,文章很短,可能只需要你马桶上5分钟的时间,你就将Get一个很牛逼的技能。原创 2017-02-02 23:24:57 · 477 阅读 · 0 评论 -
Go sqlx包 + postges pq包实现postgres的批量插入、更新
当有大量数据需要插入时,批量操作省去了大量建立、关闭连接的操作,将多次数据库写IO操作合并成一次操作,省去了很多不必要的时间消耗,将显著提高写效率。原创 2017-01-26 11:59:43 · 9512 阅读 · 2 评论 -
Go语言中异步拆分io.Reader
在Go语言中处理任何stream数据时,我已经深陷io.Reader和io.Writer的灵活性中不能自拔。同时我在有一点上又或多或少的受了些折磨,挑战我的reader interface在你看来可能会觉得很简单:那就是怎么样拆分读操作。我甚至不知道使用“拆分(split)”这个词是否正确,我就是想通过io.Reader多次读取接收到的东西,有时候可能还需要并行操作。翻译 2016-08-26 00:26:10 · 7789 阅读 · 0 评论 -
更多Go Interface细节
前面一篇主要介绍了Go interface的一些基础知识。本文着重介绍了如何判断一个interface中存储的数据的原始类型,并将interface中数据转换到对应数据类型的变量中。另外,如struct的匿名域一样,interface也支持在interface中嵌套interface来继承方法,增加interface的灵活性。Go的语法逻辑是如此之美!翻译 2016-09-16 21:40:35 · 768 阅读 · 0 评论 -
棒棒哒的Go Interface
Golang中的Interface是一件相当精妙的设计,编程时灵活的使用Interface是一种相当美妙的体验。能够让你的代码变得更加灵活,完美...翻译 2016-09-16 01:01:00 · 1154 阅读 · 0 评论 -
Golang访问SQL Like数据库(三)——sql package + Postgres driver源码走读
Golang官方没有提供数据库驱动,只是为开发数据库驱动定义了一些标准接口,开发者可以根据官方定义的标准接口来开发相应的数据库驱动。这样做的好处是:只要是按照标准接口开发的代码,需要迁移数据库时不需要任何的修改。原创 2016-08-08 02:50:35 · 1866 阅读 · 6 评论 -
Golang访问SQL like数据库(二)——sql package主要数据结构及方法
接上一篇,sql package的主要实现是database/sql, sql 中比较重要的数据结构是:type DBtype Rowtype Rowstype StmtType Txsql.Registersql.Register接口用于注册数据库驱动。第三方开发的数据库,需要在init中调用这个接口来完成本驱动的注册。接口声明为:func Register(name string,原创 2016-08-08 02:46:28 · 4756 阅读 · 9 评论 -
Golang访问SQL like数据库(一)——思想、driver需实现接口
Golang官方没有提供数据库驱动,只是为开发数据库驱动定义了一些标准接口,开发者可以根据官方定义的标准接口来开发相应的数据库驱动。这样做的好处是:只要是按照标准接口开发的代码,需要迁移数据库时不需要任何的修改。原创 2016-08-08 02:39:22 · 2233 阅读 · 0 评论 -
Go避免使用大堆造成的高GC开销
原文链接:Avoiding high GC overhead with large heapsGo的Garbage Collector(GC)在分配的内存量相对较小时工作得非常好,但是如果堆较大,GC最终可能会占用大量的CPU,在极端情况下,它甚至可能无法跟上节奏。What‘s the problem?GC的工作就是确定哪些内存可以释放,它是通过扫描内存查找内存分配的指针来完成这个工作的。简...翻译 2019-01-19 00:16:00 · 3408 阅读 · 0 评论