包的名字也使用_test结尾。如果包使用这种方式命名,测试代…
“包的名字也使用_test结尾。如果包使用这种方式命名,测试代码只能访问包里公开的标识符。即便测试代码文件和被测试的代码放在同一个文件夹中,也只能访问公开的标识符。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
基础测试(basic test)只使用一组参数和结果来测试一…
“基础测试(basic test)只使用一组参数和结果来测试一段代码。表组测试(table test)也会测试一段代码,但是会使用多组参数和结果进行测试。也可以使用一些方法来模仿(mock)测试代码需要使用到的外部资源,如数据库或者网络服务器。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
一个测试函数必须是公开的函数,并且以Test单词开头。不但函…
“一个测试函数必须是公开的函数,并且以Test单词开头。不但函数名字要以Test开头,而且函数的签名必须接收一个指向testing.T类型的指针,并且不返回任何值。如果没有遵守这些约定,测试框架就不会认为这个函数是一个测试函数,也不会让测试工具去执行它。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
应该花时间看一下标准库中提供了些什么,以及它是如何实现的——…
“应该花时间看一下标准库中提供了些什么,以及它是如何实现的——不仅要防止重新造轮子,还要理解Go语言的设计者的习惯,并将这些习惯应用到自己的包和API的设计上。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
类UNIX的操作系统如此伟大的一个原因是,一个程序的输出可以…
“类UNIX的操作系统如此伟大的一个原因是,一个程序的输出可以是另一个程序的输入这一理念。依照这个哲学,这类操作系统创建了一系列的简单程序,每个程序只做一件事,并把这件事做得非常好。之后,将这些程序组合在一起,可以创建一些脚本做一些很惊艳的事情。这些程序使用stdin和stuout设备作为通道,在进程之间传递数据。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
由于有反射包和标签的支持,可以很方便地声明一个结构类型,并将…
“由于有反射包和标签的支持,可以很方便地声明一个结构类型,并将其中的字段映射到需要处理和发布的文档的字段。由于json包和xml包都支持io.Reader和io.Writer接口,用户不用担心自己的JSON和XML文档源于哪里。所有的这些特性都让处理JSON和XML变得很容易。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
在MarshalIndent函数里再一次看到使用了空接口类型…
“在MarshalIndent函数里再一次看到使用了空接口类型interface{}。函数MarshalIndent会使用反射来确定如何将map类型转换为JSON字符串。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
go get 使用代理获取包
代理
通过shell环境变量
export http_proxy=http://127.0.0.1:8123
go get golang.org/xxx
通过设置git代理
git config –global http.proxy ‘http://127.0.0.1:8123’
go get golang.org/xxx
log包的实现,是基于对记录日志这个需求长时间的实践和积累而…
“log包的实现,是基于对记录日志这个需求长时间的实践和积累而形成的。将输出写到stdout,将日志记录到stderr,是很多基于命令行界面(CLI)的程序的惯常使用的方法。不过如果你的程序只输出日志,那么使用stdout、stderr和文件来记录日志是很好的做法。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
关键字iota在常量声明区里有特殊的作用。这个关键字让编译器…
“关键字iota在常量声明区里有特殊的作用。这个关键字让编译器为每个常量复制相同的表达式,直到声明区结束,或者遇到一个新的赋值语句。关键字iota的另一个功能是,iota的初始值为0,之后iota的值在每次处理为常量后,都会自增1。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲…
“这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲的通道保证进行发送和接收的goroutine会在同一时间进行数据交换;有缓冲的通道没有这种保证。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
当一个资源需要在goroutine之间共享时,通道在goro…
“当一个资源需要在goroutine之间共享时,通道在goroutine之间架起了一个管道,并提供了确保同步交换数据的机制。声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、结构类型和引用类型的值或者指针。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
在Go语言里,你不仅可以使用原子函数和互斥锁来保证对共享资源…
“在Go语言里,你不仅可以使用原子函数和互斥锁来保证对共享资源的安全访问以及消除竞争状态,还可以使用通道,通过发送和接收需要共享的资源,在goroutine之间做同步。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
互斥锁这个名字来自互斥(mutual exclusion)的…
“互斥锁这个名字来自互斥(mutual exclusion)的概念。互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
另外两个有用的原子函数是LoadInt64和StoreInt…
“另外两个有用的原子函数是LoadInt64和StoreInt64。这两个函数提供了一种安全地读和写一个整型值的方式。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
用了atmoic包的AddInt64函数。这个函数会同步整型…
“用了atmoic包的AddInt64函数。这个函数会同步整型值的加法,方法是强制同一时刻只能有一个goroutine运行并完成这个加法操作。当goroutine试图去调用任何原子函数时,这些goroutine都会自动根据所引用的变量做同步处理。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
竞争状态的存在是让并发程序变得复杂的地方,十分容易引起潜在问…
“竞争状态的存在是让并发程序变得复杂的地方,十分容易引起潜在问题。对一个共享资源的读和写操作必须是原子化的,换句话说,同一时刻只能有一个goroutine对共享资源进行读和写操作。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海
这种哲学的特征是:第一,一种以艺术眼光对人生的天赋才能;第二…
“这种哲学的特征是:第一,一种以艺术眼光对人生的天赋才能;第二,一种于哲理上有意识地回到简单;第三,一种合理近情的生活理想。最后的产品就是一种对于诗人、农夫和放浪者的崇拜,这是可怪的。”
—— “生活的艺术(林语堂独家授权作品)(博集文学典藏系列)” by 林语堂
因为中国人的哲学里有健全的现实意识,纯然的动物意识和一种明理…
“因为中国人的哲学里有健全的现实意识,纯然的动物意识和一种明理的精神,因此反而压倒了理性本身,使呆板的哲学体系无从产生。中国有儒道释三教,每一种教都是宏大的哲学体系,但它们都曾被健全的常识冲淡,因而都变成追求人生幸福的共同问题。中国人对任何一个哲学观念、信仰、派别,都不愿专心地相信,或过分起劲地去研究。”
—— “生活的艺术(林语堂独家授权作品)(博集文学典藏系列)” by 林语堂
并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关…
“并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被暂停去做别的事情了。在很多情况下,并发的效果比并行好,因为操作系统和硬件的总资源一般很少,但能支持系统同时做很多事情。这种“使用较少的资源做更多的事情”的哲学,也是指导Go语言设计的哲学。”
—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海