迭代切片时,关键字range会返回两个值。第一个值是当前迭代…

“迭代切片时,关键字range会返回两个值。第一个值是当前迭代到的索引位置,第二个值是该位置对应元素值的一份副本(”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

内置函数append也是一个可变参数的函数。这意味着可以在一…

“内置函数append也是一个可变参数的函数。这意味着可以在一次调用传递多个追加的值。如果使用…运算符,可以将一个切片的所有元素追加到另一个切片”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

如果在创建切片时设置切片的容量和长度一样,就可以强制让新切片…

“如果在创建切片时设置切片的容量和长度一样,就可以强制让新切片的第一个append操作创建新的底层数组,与原有的底层数组分离。新切片与原有的底层数组分离后,可以安全地进行后续修改,”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

相对于数组而言,使用切片的一个好处是,可以按需增加切片的容量…

“相对于数组而言,使用切片的一个好处是,可以按需增加切片的容量。Go语言内置的append函数会处理增加长度时的所有操作细节。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

在Go语言里,nil切片是很常见的创建切片的方法。nil切片…

“在Go语言里,nil切片是很常见的创建切片的方法。nil切片可以用于很多标准库和内置函数。在需要描述一个不存在的切片时,nil切片会很好用。例如,函数要求返回一个切片但是发生异常的时候(”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

记住,如果在[]运算符里指定了一个值,那么创建的就是数组而不…

“记住,如果在[]运算符里指定了一个值,那么创建的就是数组而不是切片。只有不指定值的时候,才会创建切片,”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

虽然Go语言自己会处理这个复制操作,不过还有一种更好且更有效…

“虽然Go语言自己会处理这个复制操作,不过还有一种更好且更有效的方法来处理这个操作。可以只传入指向数组的指针,这样只需要复制8字节的数据而不是8 MB的内存数据到栈上,”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

根据内存和性能来看,在函数间传递数组是一个开销很大的操作。在…

“根据内存和性能来看,在函数间传递数组是一个开销很大的操作。在函数之间传递变量时,总是以值的方式传递的。如果这个变量是一个数组,意味着整个数组,不管有多长,都会完整复制,并传递给函数。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

数组变量的类型包括数组长度和每个元素的类型。只有这两部分都相…

“数组变量的类型包括数组长度和每个元素的类型。只有这两部分都相同的数组,才是类型相同的数组,才能互相赋值,”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

数组是一种非常有用的数据结构,因为其占用的内存是连续分配的。…

“数组是一种非常有用的数据结构,因为其占用的内存是连续分配的。由于内存连续,CPU能把正在使用的数据缓存更久的时间。而且内存连续很容易计算索引,可以快速迭代数组里的所有元素。数组的类型信息可以提供每次访问一个元素时需要在内存中移动的距离。既然数组的每个元素类型相同,又是连续分配,就可以以固定速度索引数组中的任意数据,速度非常快。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

gb工程与Go官方工具链(包括go get)并不兼容。因为g…

“gb工程与Go官方工具链(包括go get)并不兼容。因为gb不需要设置GOPATH,而Go工具链无法理解gb工程的目录结构,所以无法用Go工具链构建、测试或者获取代码。构建(如代码清单3-16所示)和测试gb工程需要先进入$PROJECT目录,并使用gb工具。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

godep和vender这种社区工具已经使用第三方(verd…

“godep和vender这种社区工具已经使用第三方(verdoring)导入路径重写这种特性解决了依赖问题。其思想是把所有的依赖包复制到工程代码库中的目录里,然后使用工程内部的依赖包所在目录来重写所有的导入路径。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

Go语言新手常犯的一个错误是,在公用代码库里创建一个名为co…

“Go语言新手常犯的一个错误是,在公用代码库里创建一个名为code或者src的目录。如果这么做,会让导入公用库的语句变得很长。为了避免过长的语句,只需要把包的源文件放在公用代码库的根目录就好。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

如果开发人员使用命令行提示符工作,可以在终端上直接使用go …

“如果开发人员使用命令行提示符工作,可以在终端上直接使用go doc命令来打印文档。无需离开终端,即可快速浏览命令或者包的帮助。不过,如果开发人员认为一个浏览器界面会更有效率,可以使用godoc程序来启动一个Web服务器,通过点击的方式来查看Go语言的包的文档。Web服务器godoc能让开发人员以网页的方式浏览自己的系统里的所有Go语言源代码的文档。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

也可以在指定包的时候使用通配符。3个点表示匹配所有的字符串。…

“也可以在指定包的时候使用通配符。3个点表示匹配所有的字符串。例如,下面的命令会编译chapter3目录下的所有包: go build github.com/goinaction/code/chapter3/…”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

如前所述,不能导入不使用的包,为此使用空白标识符重命名这个导…

“如前所述,不能导入不使用的包,为此使用空白标识符重命名这个导入可以让init函数发现并被调度运行,让编译器不会因为包未被使用而产生错误。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

如果路径包含URL,可以使用Go工具链从DVCS获取包,并把…

“如果路径包含URL,可以使用Go工具链从DVCS获取包,并把包的源代码保存在GOPATH指向的路径里与URL匹配的目录里。这个获取过程使用go get命令完成。go get将获取任意指定的URL的包,或者一个已经导入的包所依赖的其他包。由于go get的这种递归特性,这个命令会扫描某个包的源码树,获取能找到的所有依赖包。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

编译器会使用Go环境变量设置的路径,通过引入的相对路径来查找…

“编译器会使用Go环境变量设置的路径,通过引入的相对路径来查找磁盘上的包。标准库中的包会在安装Go的位置找到。Go开发者创建的包会在GOPATH环境变量指定的目录里查找。GOPATH指定的这些目录就是开发者的个人工作空间。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

当编译器发现某个包的名字为main时,它一定也会发现名为ma…

“当编译器发现某个包的名字为main时,它一定也会发现名为main()的函数,否则不会创建可执行文件。main()函数是程序的入口,所以,如果没有这个函数,程序就没有办法开始执行。程序编译时,会使用声明main包的代码所在的目录的目录名作为二进制可执行文件的文件名。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日

给包及其目录命名时,应该使用简洁、清晰且全小写的名字,这有利…

“给包及其目录命名时,应该使用简洁、清晰且全小写的名字,这有利于开发时频繁输入包名。例如,net/http包下面的包,如cgi、httputil和pprof,名字都很简洁。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月1日