如果一个goroutine需要做一个网络I/O调用,流程上会…

“如果一个goroutine需要做一个网络I/O调用,流程上会有些不一样。在这种情况下,goroutine会和逻辑处理器分离,并移到集成了网络轮询器的运行时。一旦该轮询器指示某个网络读或者写操作已经就绪,对应的goroutine就会重新分配到逻辑处理器上来完成操作。”

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

标签:  2018年9月3日

在1.5版本①上,Go语言的运行时默认会为每个可用的物理处理…

“在1.5版本①上,Go语言的运行时默认会为每个可用的物理处理器分配一个逻辑处理器。在1.5版本之前的版本中,默认给整个应用程序只分配一个逻辑处理器。这些逻辑处理器会用于执行所有被创建的goroutine。即便只有一个逻辑处理器,Go也可以以神奇的效率和性能,并发调度无数个goroutine。”

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

标签:  2018年9月3日

一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中…

“一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中所写的代码。每个进程至少包含一个线程,每个进程的初始线程被称作主线程。因为执行这个线程的空间是应用程序的本身的空间,所以当主线程终止时,应用程序也会终止。”

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

标签:  2018年9月3日

CSP是一种消息传递模型,通过在goroutine之间传递数…

“CSP是一种消息传递模型,通过在goroutine之间传递数据来传递消息,而不是对数据进行加锁来实现同步访问。用于在goroutine之间同步和传递数据的关键数据类型叫作通道(channel)。对于没有使用过通道写并发程序的程序员来说,通道会让他们感觉神奇而兴奋。”

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

标签:  2018年9月3日

Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。…

“Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为goroutine时,Go会将其视为一个独立的工作单元。这个单元会被调度到可用的逻辑处理器上执行。Go语言运行时的调度器是一个复杂的软件,能管理被创建的所有goroutine并为其分配执行时间。”

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

标签:  2018年9月3日

要让这个行为可行,需要两个理由。第一,公开或者未公开的标识符…

“要让这个行为可行,需要两个理由。第一,公开或者未公开的标识符,不是一个值。第二,短变量声明操作符,有能力捕获引用的类型,并创建一个未公开的类型的变量。永远不能显式创建一个未公开的类型的变量,不过短变量声明操作符可以这么做。”

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

标签:  2018年9月3日

当一个标识符的名字以小写字母开头时,这个标识符就是未公开的,…

“当一个标识符的名字以小写字母开头时,这个标识符就是未公开的,即包外的代码不可见。如果一个标识符以大写字母开头,这个标识符就是公开的,即被包外的代码可见。”

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

标签:  2018年9月3日

这表明,如果外部类型实现了notify方法,内部类型的实现就…

“这表明,如果外部类型实现了notify方法,内部类型的实现就不会被提升。不过内部类型的值一直存在,因此还可以通过直接访问内部类型的值,来调用没有被提升的内部类型实现的方法。”

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

标签:  2018年9月3日

由于内部类型的提升,内部类型实现的接口会自动提升到外部类型。…

“由于内部类型的提升,内部类型实现的接口会自动提升到外部类型。这意味着由于内部类型的实现,外部类型也同样实现了这个接口。”

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

标签:  2018年9月3日

通过嵌入类型,与内部类型相关的标识符会提升到外部类型上。这些…

“通过嵌入类型,与内部类型相关的标识符会提升到外部类型上。这些被提升的标识符就像直接声明在外部类型里的标识符一样,也是外部类型的一部分。这样外部类型就组合了内部类型包含的所有属性,并且可以添加新的字段和方法。外部类型也可以通过声明与内部类型标识符同名的标识符来覆盖内部标识符的字段或者方法。这就是扩展或者修改已有类型的方法。”

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

标签:  2018年9月3日

这个规则说,如果使用指针接收者来实现一个接口,那么只有指向那…

“这个规则说,如果使用指针接收者来实现一个接口,那么只有指向那个类型的指针才能够实现对应的接口。如果使用值接收者来实现一个接口,那么那个类型的值和指针都能够实现对应的接口。”

—— “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语言实战(异步图书)” 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语言里的引用类型有如下几个:切片、映射、通道、接口和函数类型。当声明上述类型的变量时,创建的变量被称作标头(header)值。从技术细节上说,字符串也是一种引用类型。每个引用类型创建的标头值是包含一个指向底层数据结构的指针。”

—— “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日