golang读书笔记
文章平均质量分 54
zhanglehes
这个作者很懒,什么都没留下…
展开
-
包和工具(读书笔记)
任何包系统设计的目的都是为了简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的单元以便于理解和更新,在每个单元更新的同时保持和程序中其它单元的相对独立性。Go语言的闪电般的编译速度主要得益于三个语言特性。第一点,所有导入的包必须在每个文件的开头显式声明,这样的话编译器就没有必要读取和分析整个源文件来判断包的依赖关系。第二点,禁止包的环状依赖,因为没有循环依赖,包的依赖关系形成一个有向无环图,每个包可以被独立编译,而且很可能是被并发编译。第三点,编译后包的目标文件不仅仅记录包本身的导出信息,原创 2021-11-02 20:03:20 · 72 阅读 · 0 评论 -
基于共享变量的并发(读书笔记)
数据竞争的定义 --数据竞争会在两个以上的goroutine并发访问相同的变量且至少其中一个为写操作时发生Go的口头禅“不要使用共享数据来通信;使用通信来共享数据”惯例来说,被mutex所保护的变量是在mutex变量声明之后立刻声明的。go里没有重入锁在现代计算机中可能会有一堆处理器,每一个都会有其本地缓存(local cache)。为了效率,对内存的写入一般会在每一个处理器中缓冲,并在必要时一起flush到主存。这种情况下这些数据可能会以与当初goroutine写入顺序不.原创 2021-10-13 10:48:00 · 73 阅读 · 0 评论 -
Goroutines和Channels(读书笔记)
除了从主函数退出或者直接终止程序之外,没有其它的编程方法能够让一个goroutine来打断另一个的执行,但是之后可以看到一种方式来实现这个目的,通过goroutine之间的通信来让一个goroutine请求其它的goroutine,并让被请求的goroutine自行结束执行。go后跟的函数的参数会在go语句自身执行时被求值;因此input.Text()会在main goroutine中被求值。如果说goroutine是Go语言程序的并发体的话,那么channels则是它们之间的通信机制。一个chan原创 2021-09-06 19:48:50 · 102 阅读 · 0 评论 -
反射(读书笔记)
目录概念三大法则从interface{}变量可以反射出反射对象从反射对象可以获取interface{}变量要修改反射对象,其值必须可设置概念运行时反射是程序在运行期间检查其自身结构的一种方式。三大法则从interface{}变量可以反射出反射对象使用reflect.TypeOf可以获取变量的类型相关参数,reflect.ValueOf获取变量值相关参数有了变量的类型之后,我们可以通过Method方法获得类型实现的方法,通过Field获取类型...原创 2021-08-27 18:02:17 · 51 阅读 · 0 评论 -
基础数据类型(读书笔记)
本章介绍基础类型,包括:数字、字符串和布尔型。复合数据类型——数组(§4.1)和结构体(§4.2)——是通过组合简单类型,来表达更加复杂的数据结构。引用类型包括指针(§2.3.2)、切片(§4.2))、字典(§4.3)、函数(§5)、通道(§8),虽然数据种类很多,但它们都是对程序中一个变量或状态的间接引用。这意味着对任一引用类型数据的修改都会影响所有该引用的拷贝。位操作运算符&^用于按位置零(AND NOT):如果对应y中bit位为1的话,表达式z = x &^ y结果z的..原创 2021-06-23 11:00:27 · 100 阅读 · 0 评论 -
函数(读书笔记)
虽然Go的垃圾回收机制会回收不被使用的内存,但是这不包括操作系统层面的资源,比如打开的文件、网络连接。因此我们必须显式的释放这些资源。当一个函数有多处return语句以及许多返回值时,bare return 可以减少代码的重复,但是使得代码难以被理解。如果导致失败的原因只有一个,额外的返回值可以是一个布尔值,通常被命名为ok。通常,导致失败的原因不止一种,尤其是对I/O操作而言,用户需要了解更多的错误信息。因此,额外的返回值不再是简单的布尔类型,而是error类型。函数字面...原创 2021-06-23 11:03:10 · 127 阅读 · 0 评论 -
方法(读书笔记)
在函数声明时,在其名字之前放上一个变量,即是一个方法。上面的代码里那个附加的参数p,叫做方法的接收器(receiver),早期的面向对象语言留下的遗产将调用一个方法称为“向一个对象发送消息”。在能够给任意类型定义方法这一点上,Go和很多其它的面向对象的语言不太一样。因此在Go语言里,我们为一些简单的数值、字符串、slice、map来定义一些附加行为很方便。只有类型(Point)和指向他们的指针(*Point),才是可能会出现在接收器声明里的两种接收器。此外,为了避免歧义,在声明方法时,如原创 2021-06-29 11:32:18 · 63 阅读 · 0 评论 -
接口(读书笔记)
接口类型具体描述了一系列方法的集合,一个实现了这些方法的具体类型是这个接口类型的实例。一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口。以下面的代码为例:var w io.Writerw = os.Stdoutw = new(bytes.Buffer)w = nil对于一个接口的零值就是它的类型和值的部分都是nil(图7.1)。第二个语句将一个*os.File类型的值赋给变量w:w = os.Stdout这个赋值过程调用了一个具体类型到接口类型原创 2021-08-05 10:11:00 · 61 阅读 · 0 评论