Alan A.A.Donovan. Brian W.Kemighan. Go 语言程序设计(英文版). 电子工业出版社. 第一版
夯实一下 go ,找这本书再合适不过了。已经是读的第三本 Kemighan 的书了。在公司的书架上找到的,纯英文版,值得挑战一下。
2022年7月27日一周时间读完了,收获还是不少的。
- 1. Tutorial
- 2. Program Structure
- 3. Basic Data Types
- 4. Composite Types
- 5. Functions
- 6. Methods
- 7. Interface
- 8. Goroutines and Channels
- 9. Concurrency with Shared Variables
- 10. Packages and the Go Tool
- 11. Testing
- 12. Reflection
- 13. Low-Level Programming
- 1.1 Hello, World
- 1.2 Command-Line Arguments
- 1.3 Finding Duplicate Lines
- 1.4 Animated GIFs
- 1.5 Fetching a URL
- 1.6 Fetching URLs Concurrently
- 1.7 A Web Server
- 1.8 Loose Ends
./drafts/go.02.program-structure.md
- 2.1 Names
- 2.2 Declarations
- 2.3 Variables
- 2.4 Assignments
- 2.5 Type Declarations
- 2.6 Packages and Files
- 2.7 Scope
./drafs/go.03.basic-data-types.md
- 3.1 Integers
- 3.2 Floating-Point Numbers
- 3.3 Complex Numbers
- 3.4 Booleans
- 3.5 Strings (博弈:可变性与内存共享)
- 3.6 Constants
./drafts/go.04.composite-types.md
- 5.1 Function Declarations
- 5.2 Recursion
- 5.3 Multiple Return Values
- 5.4 Errors
- 5.5 Function Values
- 5.6 Anonymous Functions
- 5.7 Variadic Functions
- 5.8 Deferred Function Calls
- 5.9 Panic
- 5.10 Recover
- 6.1 Method Declarations
- 6.2 Methods with a Pointer Receiver
- 6.3 Composing Types by Struct Embedding
- 6.4 Method Values and Expressions
- 6.5 Example: Bit Vector Type
- 6.6 Encapsulation
- 7.1 Interfaces as Contracts
- 7.2 Interface Types
- 7.3 Interface Satisfaction
- 7.4 Parsing Flags with flag.Value
- 7.5 Interface Values
- 7.6 Sorting with sort.Interface
- 7.7 The http.Handler Interface
- 7.8 The error Interface
- 7.9 Example: Expression Evaluator (很实用:手写 ast 以及 eval )
- 7.10 Type Assertions
- 7.11 Discriminating Errors with Type Assertions
- 7.12 Querying Behaviors with Interface Type Assertions
- 7.13 Type Switches (使用 x.(type) )
- 7.14 Example: Token-Based XML Decoding
- 7.15 A Few Words of Advice
./drafts/go.08.goroutines-and-channels.md
- 8.1 Goroutines
- 8.2 Example: Concurrent Clock Server
- 8.3 Example: Concurrent Echo Server
- 8.4 Channels
- 8.5 Looping in Parallel
- 8.6 Example: Concurrent Web Crawler
- 8.7 Multiplexing with select
- 8.8 Example: Concurrent Directory Traversal
- 8.9 Cancellation
- 8.10 Example: Chat Server
./drafts/go.09.concurrency-with-shared-variables.md
- 9.1 Race Conditions
- 9.2 Mutual Exclusion: sync.Mutex
- 9.3 Read/Write Mutexes: sync.RWMutex
- 9.4 Memory Synchronization
- 9.5 Lazy Initialization: sync.Once
- 9.6 The Race Detector
- 9.7 Example: Concurrent Non-Blocking Cache (一个键值对一个锁?不,人均 entry 做 chan broadcast )
- 9.8 Goroutines and Threads (重要)
./drafts/go.10.packages-and-the-go-tool.md
- 10.1 Introduction
- 10.2 Import Paths
- 10.3 The Package Declaration
- 10.4 Import Declarations
- 10.5 Blank Imports
- 10.6 Packages and Naming
- 10.7 The Go Tool
- 11.1 The go test Tool
- 11.2 Test Functions
- 11.3 Coverage
- 11.4 Benchmark Functions
- 11.5 Profiling
- 11.6 Example Functions
- 12.1 Why Reflection (检测是否已存在 Stringer 方法)
- 12.2 reflect.Type and reflect.Value
- 12.3 Display, a Recursive Value Printer
- 12.4 Example: Encoding S-Expressions
- 12.5 Setting Variables with reflect.Value
- 12.6 Example: Decoding S-Expressions
- 12.7 Accessing Struct Field Tags
- 12.8 Displaying the Methods of a Type
- 12.9 A Word of Caution