一个多月前,Go 的网站发了一篇博文《Go Turns 10》,心里一惊,它已经诞生 10 年了!
10 年里,Go 发布的几十篇博文介绍了 Go 的方方面面,是获得 Go 语言最新进展和能力的不二之选。
Toward Go 2:Go 2 启动,5 年实际应用后,Go 语言从推广转向进化
Go 2, here we come!:Go 2 的进展
Next steps toward Go 2:Go 2 的进展
Why Generics?:正在进行中的范型设计
Godoc: documenting Go code:注释文档
Organizing Go code:package 组织方式的官方建议
Go Modules in 2019:go modules 全面替换 GOPATH
Using Go Modules:go module 的使用方法
Migrating to Go Modules:怎样迁移到 go module
Publishing Go Modules:go module 发布与版本规范
Go Modules: v2 and Beyond:主版本发生变换时的操作
Module Mirror and Checksum Database Launched:go module 背后的机制
A Proposal for Package Versioning in Go:详细介绍了 go module 的设计过程
The cover story:go 的测试覆盖率工具 -cover
Testable Examples in Go:怎样写和文档融合在一起的示例
Using Subtests and Sub-benchmarks:测试用例和基准测试的增强功能
Debugging Go code (a status report):go 语言程序的最开始调试方法
Debugging what you deploy in Go 1.12:go 1.12 进一步优化了调试工具,使用 delve
Go 开发的程序,最开始的调试方法只有日志和 gdb,并且是支持 DWARF 的 gdb 7+,并且不支持 channel、interface 等等。现在好很多了,可以用 delve,另外对 gdb 继续支持(不好用):
Profiling Go Programs:非常重要,go 的性能诊断工具 pprof
Smaller Go 1.7 binaries:可执行文件体积压缩了 30% 以上
Defer, Panic, and Recover :defer 的规则,以及 panic 和 recover
defer 规则:
panic 规则:
recover 规则:
Error handling and Go:go 的 error 处理
Working with Errors in Go 1.13: go 1.13 引入的 error 语法糖
Go GC: Prioritizing low latency and simplicity:go1.5 引入的新的 gc 方法
Getting to Go: The Journey of Go’s Garbage Collector: go 垃圾回收机制的演变
Go Slices: usage and internals:go 的 slice 不是数组。
[3] int
和 [4] int
是不同的类型JSON and Go:json 序列化和反序列化,Reference Types 的处理值得关注
Go maps in action:map(哈希表)的方方面面,非并发安全
Arrays, slices (and strings): The mechanics of append:append 的实现方法,复制时机
// Insert inserts the value into the slice at the specified index,
// which must be in range.
// The slice must have room for the new element.
func Insert(slice []int, index, value int) []int {
// Grow the slice by one element.
slice = slice[0 : len(slice)+1]
// Use copy to move the upper part of the slice out of the way and open a hole.
copy(slice[index+1:], slice[index:])
// Store the new value.
slice[index] = value
// Return the result.
return slice
}
Constants:constant 与变量的区别,const 不需要类型转换
Share Memory By Communicating: Go 语言设计思想,通过传递指针的方式使用共享内存
多线程编程时,经常通过共享内存实现线程间的通信,需要非常小心的处理加锁和解锁的时机。 Go 语言提供了互斥锁、读写锁,但是更鼓励用 channel 传递指针的方式实现。用 channel 保证同一时刻,只有一个协程在处理目标变量。
Go Concurrency Patterns: Timing out, moving on:一种设置等待超时的方法
在 select 中放一个定时 channel:
select {
case <-ch:
// a read from ch has occurred
case <-timeout:
// the read from ch has timed out
}
Concurrency is not parallelism:并发不等于并行,一段 30 分钟的视频
Advanced Go Concurrency Patterns:更深入了介绍了并发的问题,又一段 30 分钟视频
这两段视频,抽时间看一下。。。
Introducing the Go Race Detector:竞争检测工具 -race
Go Concurrency Patterns: Context:用 context 串联相关的 goroutine
Go Concurrency Patterns: Pipelines and cancellation:go channel 的经典用法
Strings, bytes, runes and characters in Go:byte、character 和 rune 的区别
下面这段代码的 index 的值,很有意思:
const nihongo = "日本語"
for index, runeValue := range nihongo {
fmt.Printf("%#U starts at byte position %d\n", runeValue, index)
}
Text normalization in Go: 处理 utf8 字符时应该注意的问题
Language and Locale Matching in Go:用户语言与应用支持的语言的搭配策略
C? Go? Cgo!:在 Go 代码中引用 C 代码的方法
Gobs of data:Go 新开发的编码和使用方式
Gobs 的优势没看懂,编码方面的知识需要恶补
Spotlight on external Go libraries:几个比较实用的外部库
The Laws of Reflection:反射的设计和用法
Go 提供了几个图片处理的库,挺有意思,找时间学习:
Generating code:代码自动生成 go:generate
Introducing HTTP Tracing:跟踪 http 请求调用过程的方法
HTTP/2 Server Push:http/2 的主要特点、使用方法和注意事项
Portable Cloud Programming with Go Cloud:go 的跨云
运行方案
What’s new in the Go Cloud Development Kit:
Compile-time Dependency Injection With Go Cloud’s Wire:依赖注入工具 wire
Real Go Projects: SmartTwitter and web.go:Smart Twitter
Go at Heroku:使用 Go 实现 Paxos 协议的经历
From zero to Go: launching on the Google homepage in 24 hours:用 go 实现 google 主页
Building StatHat with Go:使用 go 开发的 stathat
Inside the Go Playground:go Playground 的实现
Introducing the Go Playground:go 在线运行
Go for App Engine is now generally available:gae 支持 go runtime
Go and the Google Cloud Platform
Go on App Engine: tools, tests, and concurrency
Announcing App Engine’s New Go 1.11 Runtime
The New Go Developer Network:分布在全球各地的 go 小组
Go.dev: a new hub for Go developers:Go 代码仓库
Hello, 中国!:中国镜像站 https://golang.google.cn
20120328 Go version 1 is released
20131201 Go 1.2 is released
20140618 Go 1.3 is released
20141110 Go 1.4 is released
20150819 Go 1.5 is released
20160217 Go 1.6 is released
20160815 Go 1.7 is released
20170216 Go 1.8 is released
20170824 Go 1.9 is released
20180216 Go 1.10 is released
20180824 Go 1.11 is released
20190225 Go 1.12 is released
20190903 Go 1.13 is released