首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Go语言实战》读书笔记

第1章 关于Go语言的介绍

Go语言中没有继承,只有组合。

面向接口编程,编译器会判断一个类型的实例是否符合正在使用的接口。

duck type:不用显式声明实现了某个接口,只要实现了接口对应的那组行为即可。

第2章 快速开始一个Go程序

包名类似于命名空间。

map变量默认的零值是nil,只有调用make进行构造才能避免。

匿名函数:没有明确声明名字,可以接受声明时定义的参数。

访问文件时,相对路径是从项目根目录开始的,即,XX_proj/src中的xx_proj这一层。

命名惯例:如果接口类型只包含一个方法,那么这个类型的名字以er结尾。

WaitGroup,类似于Java中的CountLatchDown。

第3章 打包和工具链

支持远程导入,用go get命令来完成。

自带godoc命令,可以方便地搭建在线文档。

可以直接提取注释,生成文档。

go get不会指定获取依赖库的哪个版本。

gb通过vendor来管理依赖,可以摆脱对GOPATH的依赖。

第4章 数组、切片和映射

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

切片可以动态改变大小,当容量不够时,append函数将创建一个新的底层数组,把被引用的现有的值赋值到新数组里,再追加新的值。容量小于1000个元素时,总是成倍地增加;查过1000,则每次增加25%的容量。

切片共用同一个底层数组的特性需要注意,可能会在append时导致奇怪的错误。可以通过让新切片的容量和长度保持一致,令append强制创建新的底层数组,来避免这个问题。

切片和映射传递给函数时,不会复制底层的数据结构。

第5章 Go语言的类型系统

值接收者:支持指针和值调用

指针接收者:支持指针和值调用

Go语言中调用方法时,不必严格符合接收者的类型。

方法集:

如果调用方期望一个实现了某接口的值,则传入的类型在实现方法时,必须用值来作为接收者。

如果调用方期望一个实现了某接口的指针,则传入的类型在实现方法时,用值或者指针作为接收者均可。

内部类型提升:

如果外部类型没有实现同名方法,则内部类型实现的接口会自动提升到外部类型。

第6章 并发

goroutine在逻辑处理器上执行,而逻辑处理器具有独立的系统线程和运行队列。

竞态检测:go build -race。可以显示哪个goroutine引发了数据竞争,以及哪两行代码有冲突。

同步:原子函数和mutex;channel。

Channel:

无缓冲通道:如果发送goroutine和接收goroutine没有同时准备好,则先执行的goroutine会等待。

可以保证同时交换数据。

有缓冲通道:只有在通道中没有要接收的值时,接收动作才会阻塞。只有通道已满时,发送动作才会阻塞。

通道关闭后,仍然可以从里面取数据。

chan

第7章 并发模式

无缓冲通道:创建完成工作的goroutine池

有缓冲通道:管理一组可复用的资源

第8章 标准库

自带log包,基本上不用再考虑自己实现记录日志的功能了。

在调用函数后,判定返回值中的err是否为nil,是Go语言中常见的一种编程习惯。

第9章 测试和性能

mock:在测试没有所需的外部资源时,模拟这些资源的行为,使得测试能够正常进行。

在测试函数的开始声明一个匿名函数,其签名与待测试函数调用的资源保持一致。

godoc,可以生成交互式文档。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190129A0LJ8A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券