两种不同类型的值即便互相兼容,也不能互相赋值。编译器不会对不…

“两种不同类型的值即便互相兼容,也不能互相赋值。编译器不会对不同类型的值做隐式转换。”

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

标签:  2018年9月2日

Duration类型的声明中,我们把int64类型叫作Dur…

“Duration类型的声明中,我们把int64类型叫作Duration的基础类型。不过,虽然int64是基础类型,Go并不认为Duration和int64是同一种类型。这两个类型是完全不同的有区别的类型。”

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

标签:  2018年9月2日

任何时候,创建一个变量并初始化为其零值,习惯是使用关键字va…

“任何时候,创建一个变量并初始化为其零值,习惯是使用关键字var。这种用法是为了更明确地表示一个变量被设置为零值。如果变量被初始化为某个非零值,就配合结构字面量和短变量声明操作符来创建变量。”

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

标签:  2018年9月2日

值的类型给编译器提供两部分信息:第一部分,需要分配多少内存给…

“值的类型给编译器提供两部分信息:第一部分,需要分配多少内存给这个值(即值的规模);第二部分,这段内存表示什么。对于许多内置类型的情况来说,规模和表示是类型名的一部分。int64类型的值需要8字节(64位),表示一个整数值;float32类型的值需要4字节(32位),表示一个IEEE-754定义的二进制浮点数;bool类型的值需要1字节(8位),表示布尔值true和false。”

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

标签:  2018年9月2日

在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递…

“在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改时,所有对这个映射的引用都会察觉到这个修改,”

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

标签:  2018年9月2日

在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递…

“在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改时,所有对这个映射的引用都会察觉到这个修改,”

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

标签:  2018年9月2日

在Go语言里,通过键来索引映射时,即便这个键不存在也总会返回…

“在Go语言里,通过键来索引映射时,即便这个键不存在也总会返回一个值。在这种情况下,返回的是该值对应的类型的零值。”

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

标签:  2018年9月2日

映射使用两个数据结构来存储数据。第一个数据结构是一个数组,内…

“映射使用两个数据结构来存储数据。第一个数据结构是一个数组,内部存储的是用于选择桶的散列键的高八位值。这个数组用于区分每个键值对要存在哪个桶里。第二个数据结构是一个字节数组,用于存储键值对。该字节数组先依次存储了这个桶里所有的键,之后依次存储了这个桶里所有的值。实现这种键值对的存储方式目的在于减少每个桶所需的内存。”

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

标签:  2018年9月2日

映射的散列表包含一组桶。在存储、删除或者查找键值对的时候,所…

“映射的散列表包含一组桶。在存储、删除或者查找键值对的时候,所有操作都要先选择一个桶。把操作映射时指定的键传给映射的散列函数,就能选中对应的桶。这个散列函数的目的是生成一个索引,这个索引最终将键值对分布到所有可用的桶里。”

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

标签:  2018年9月2日

在64位架构的机器上,一个切片需要24字节的内存:指针字段需…

“在64位架构的机器上,一个切片需要24字节的内存:指针字段需要8 字节,长度和容量字段分别需要8字节。由于与切片关联的数据包含在底层数组里,不属于切片本身,所以将切片复制到任意函数的时候,对底层数组大小都不会有影响。复制时只会复制切片本身,不会涉及底层数组(”

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

标签:  2018年9月2日

迭代切片时,关键字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日