# 項目進度 - [x] Preface - [x] Chapter 1: Tutorial - [x] 1.1 Hello, World - [x] 1.2 Command-Line Arguments - [x] 1.3 Finding Duplicate Lines - [x] 1.4 Animated GIFs - [x] 1.5 Fetching a URL - [x] 1.6 Fetching URLs Concurrently - [x] 1.7 A Web Server - [x] 1.8 Loose Ends - [x] Chapter 2: Program Structure - [x] 2.1 Names - [x] 2.2 Declarations - [x] 2.3 Variables - [x] 2.4 Assignments - [x] 2.5 Type Declarations - [x] 2.6 Packages and Files - [x] 2.7 Scope - [x] Chapter 3: Basic Data Types - [ ] 3.1 Integers - [ ] 3.2 Floating-Point Numbers - [ ] 3.3 Complex Numbers - [ ] 3.4 Booleans - [ ] 3.5 Strings - [ ] 3.6 Constants - [ ] Chapter 4: Composite Types - [ ] 4.1 Arrays - [ ] 4.2 Slices - [ ] 4.3 Maps - [ ] 4.4 Structs - [ ] 4.5 JSON - [ ] 4.6 Text and HTML Templates - [ ] Chapter 5: Functions - [ ] 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 - [x] Chapter 6: Methods - [x] 6.1 Method Declarations - [x] 6.2 Methods with a Pointer Receiver - [x] 6.3 Composing Types by Struct Embedding - [x] 6.4 Method Values and Expressions - [x] 6.5 Example: Bit Vector Type - [x] 6.6 Encapsulation - [x] Chapter 7: Interfaces - [x] 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 - [ ] 7.10 Type Assertions - [ ] 7.11 Discriminating Errors with Type Assertions - [ ] 7.12 Querying Behaviors with Interface Type Assertions - [ ] 7.13 Type Switches - [ ] 7.14 Example: Token-Based XML Decoding - [ ] 7.15 A Few Words of Advice - [x] Chapter 8: Goroutines and Channels - [x] 8.1 Goroutines - [x] 8.2 Example: Concurrent Clock Server - [ ] 8.3 Example: Concu rent Echo Server - [ ] 8.4 Channels - [ ] 8.5 Looping in Parallel - [x] 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 - [ ] Chapter 9: Concurrency with Shared Variables - [ ] 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 - [ ] 9.8 Goroutines and Threads - [x] Chapter 10: Packages and the Go Tool - [x] 10.1 Introduction - [x] 10.2 Import Paths - [x] 10.3 The Package Declaration - [x] 10.4 Import Declarations - [x] 10.5 Blank Imports - [x] 10.6 Packages and Naming - [x] 10.7 The Go Tool - [x] Chapter 11: Testing - [x] 11.1 The go test Tool - [ ] 11.2 Test Functions - [ ] 11.3 Coverage - [ ] 11.4 Benchmark Functions - [ ] 11.5 Profiling - [x] 11.6 Example Functions - [ ] Chapter 12: Reflection - [ ] 12.1 Why Reflection? - [ ] 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 - [x] Chapter 13: Low-Level Programming - [x] 13.1 unsafe.Sizeof, Alignof, and Offsetof - [x] 13.2 unsafe.Pointer - [x] 13.3 Example: Deep Equivalence - [x] 13.4 Calling C Code with cgo - [x] 13.5 Another Word of Caution - [ ] Exercise and Answer - [ ] Errata