Chapter 2. Go quick-start
Listing 2.1. Project structure for the application
Listing 2.4. main.go: lines 03–09
Listing 2.6. main.go: lines 11–15
Listing 2.7. main.go: lines 19–20
Listing 2.8. search/search.go: lines 01–09
Listing 2.9. GOROOT and GOPATH environmental variables
Listing 2.10. search/search.go: lines 08–09
Listing 2.12. search/search.go: lines 11–57
Listing 2.13. search/search.go: lines 11–12
Listing 2.14. main.go: lines 17–21
Listing 2.15. search/search.go: lines 13–17
Listing 2.16. search/search.go: lines 13–14
Listing 2.17. search/search.go: lines 19–20
Listing 2.18. search/search.go: lines 22–27
Listing 2.19. search/search.go: lines 29–42
Listing 2.20. search/search.go: lines 29–30
Listing 2.21. search/search.go: lines 31–35
Listing 2.22. search/search.go: lines 37–41
Listing 2.23. search/search.go: lines 39–40
Listing 2.24. search/search.go: lines 29–32
Listing 2.25. search/search.go: lines 44–57
Listing 2.26. feed.go: lines 01–08
Listing 2.28. feed.go: lines 10–15
Listing 2.29. feed.go: lines 17–36
Listing 2.30. feed.go: lines 25–27
Listing 2.31. feed.go: lines 29–36
Listing 2.32. Using the empty interface
Listing 2.33. search/search.go : lines 29 - 42
Listing 2.34. search/match.go: lines 01–17
Listing 2.35. search/default.go: lines 01–15
Listing 2.36. search/default.go: line 13
Listing 2.37. Example of method calls
Listing 2.38. Example of interface method call restrictions
Listing 2.39. search/match.go: lines 19–33
Listing 2.40. search/match.go: lines 35–43
Listing 2.41. search/search.go: lines 44–57
Listing 2.42. search/match.go: lines 29–32
Listing 2.43. search/match.go: lines 38–42
Listing 2.44. search/default.go: lines 06–10
Listing 2.45. main.go: lines 07–08
Listing 2.46. search/search.go: lines 59–67
Listing 2.47. Expected RSS feed document
Listing 2.48. matchers/rss.go: lines 01–12
Listing 2.49. matchers/rss.go: lines 14–58
Listing 2.50. matchers/rss.go: lines 60–61
Listing 2.51. matchers/rss.go: lines 63–67
Listing 2.52. main.go: lines 07–08
Listing 2.53. matchers/rss.go: lines 114–140
Listing 2.54. matchers/rss.go: lines 69–112
Listing 2.55. matchers/rss.go: line 71
Listing 2.56. matchers/rss.go: lines 75–79
Chapter 3. Packaging and tooling
Listing 3.1. Traditional Hello World! application
Listing 3.2. Invalid Go program with main function
Listing 3.3. Import statement blocks
Listing 3.5. init function usage
Listing 3.6. Blank identifier import aliasing
Listing 3.7. Working with the io package
Listing 3.8. Working with go vet
Listing 3.9. Project using godep
Listing 3.10. Before vendoring
Listing 3.12. Example of a gb project
Listing 3.13. The location for the code you write for the project
Listing 3.14. The location of vendored code
Chapter 4. Arrays, slices, and maps
Listing 4.1. Declaring an array set to its zero value
Listing 4.2. Declaring an array using an array literal
Listing 4.3. Declaring an array with Go calculating size
Listing 4.4. Declaring an array initializing specific elements
Listing 4.5. Accessing array elements
Listing 4.6. Accessing array pointer elements
Listing 4.7. Assigning one array to another of the same type
Listing 4.8. Compiler error assigning arrays of different types
Listing 4.9. Assigning one array of pointers to another
Listing 4.10. Declaring two-dimensional arrays
Listing 4.11. Accessing elements of a two-dimensional array
Listing 4.12. Assigning multidimensional arrays of the same type
Listing 4.13. Assigning multidimensional arrays by index
Listing 4.14. Passing a large array by value between functions
Listing 4.15. Passing a large array by pointer between functions
Listing 4.16. Declaring a slice of strings by length
Listing 4.17. Declaring a slice of integers by length and capacity
Listing 4.18. Compiler error setting capacity less than length
Listing 4.19. Declaring a slice with a slice literal
Listing 4.20. Declaring a slice with index positions
Listing 4.21. Declaration differences between arrays and slices
Listing 4.22. Declaring a nil slice
Listing 4.23. Declaring an empty slice
Listing 4.24. Declaring an array using an array literal
Listing 4.25. Taking the slice of a slice
Listing 4.26. How length and capacity are calculated
Listing 4.27. Calculating the new length and capacity
Listing 4.28. Potential consequence of making changes to a slice
Listing 4.29. Runtime error showing index out of range
Listing 4.30. Using append to add an element to a slice
Listing 4.31. Using append to increase the length and capacity of a slice
Listing 4.32. Declaring a slice of string using a slice literal
Listing 4.33. Performing a three-index slice
Listing 4.34. How length and capacity are calculated
Listing 4.35. Runtime error setting capacity larger than existing capacity
Listing 4.36. Benefits of setting length and capacity to be the same
Listing 4.37. Appending to a slice from another slice
Listing 4.38. Iterating over a slice using for range
Listing 4.39. range provides a copy of each element
Listing 4.40. Using the blank identifier to ignore the index value
Listing 4.41. Iterating over a slice using a traditional for loop
Listing 4.42. Declaring a multidimensional slice
Listing 4.43. Composing slices of slices
Listing 4.44. Passing slices between functions
Listing 4.45. Declaring a map using make
Listing 4.46. Declaring an empty map using a map literal
Listing 4.47. Declaring a map that stores slices of strings
Listing 4.48. Assigning values to a map
Listing 4.49. Runtime error assigned to a nil map
Listing 4.50. Retrieving a value from a map and testing existence.
Listing 4.51. Retrieving a value from a map testing the value for existence
Listing 4.52. Iterating over a map using for range
Listing 4.53. Removing an item from a map
Chapter 5. Go’s type system
Listing 5.1. Declaration of a struct type
Listing 5.2. Declaration of a variable of the struct type set to its zero value
Listing 5.3. Declaration of a variable of the struct type using a struct literal
Listing 5.4. Creating a struct type value using a struct literal
Listing 5.5. Creating a struct type value without declaring the field names
Listing 5.6. Declaring fields based on other struct types
Listing 5.7. Using struct literals to create values for fields
Listing 5.8. Declaration of a new type based on an int64
Listing 5.9. Compiler error assigning value of different types
Listing 5.10. Actual compiler error
Listing 5.12. Output for listing11.go
Listing 5.13. listing11.go: lines 09–20
Listing 5.14. Declaration of a method with a value receiver
Listing 5.15. listing11.go: lines 29–32
Listing 5.16. Calling a method from a variable
Listing 5.17. listing11.go: lines 34–37
Listing 5.18. What Go is doing underneath the code
Listing 5.19. listing11.go: lines 22–25
Listing 5.20. listing11.go: lines 36, 44–46
Listing 5.21. listing11.go: line 31
Listing 5.22. What Go is doing underneath the code
Listing 5.23. golang.org/src/strings/strings.go: lines 620–625
Listing 5.24. golang.org/src/os/env.go: lines 38–44
Listing 5.25. golang.org/src/net/ip.go: line 32
Listing 5.26. golang.org/src/net/ip.go: lines 329–337
Listing 5.27. golang.org/src/net/ip.go: lines 318–325
Listing 5.28. golang.org/src/time/time.go: lines 39–55
Listing 5.29. golang.org/src/time/time.go: lines 781–784
Listing 5.30. golang.org/src/time/time.go: lines 610–622
Listing 5.31. golang.org/src/os/file_unix.go: lines 15–29
Listing 5.32. golang.org/src/os/file.go: lines 238–240
Listing 5.33. golang.org/src/os/file.go: lines 224–232
Listing 5.37. listing36.go: lines 40–44
Listing 5.38. listing36.go: lines 28–38
Listing 5.39. Compiler error storing a value of type user to the interface value
Listing 5.40. listing36.go: lines 08–12, 21–25
Listing 5.41. Closer look at compiler error
Listing 5.42. Method sets as described by the specification
Listing 5.43. Method sets from the perspective of the receiver type
Listing 5.44. listing36.go: lines 28–38
Listing 5.45. listing36.go: lines 28–35
Listing 5.47. Second look at the method set rules
Listing 5.49. listing48.go: lines 40–49
Listing 5.51. listing50.go: lines 09–13, 23–27
Listing 5.52. listing50.go: lines 15–21
Listing 5.53. listing50.go: lines 30–45
Listing 5.54. listing50.go: lines 40–41
Listing 5.55. listing50.go: lines 43–45
Listing 5.57. listing56.go: lines 08–12, 51–55
Listing 5.58. listing56.go: lines 35–49
Listing 5.59. Output for listing56.go
Listing 5.61. listing60.go: lines 35–41
Listing 5.62. listing60.go: lines 43–64
Listing 5.63. Output for listing60.go
Listing 5.65. counters/counters.go
Listing 5.67. listing64.go: lines 13–19
Listing 5.69. counters/counters.go
Listing 5.72. entities/entities.go
Chapter 6. Concurrency
Listing 6.2. Output for listing01.go
Listing 6.3. listing01.go: lines 17–19, 23–26, 49–51
Listing 6.5. Output for listing04.go
Listing 6.6. How to change the number of logical processors
Listing 6.8. Output for listing07.go
Listing 6.10. Output for listing09.go
Listing 6.11. Building and running listing09 with the race detector
Listing 6.12. Lines of code called out by the race detector
Listing 6.14. Output for listing13.go
Listing 6.17. Using make to create a channel
Listing 6.18. Sending values into a channel
Listing 6.19. Receiving values from a channel
Listing 6.21. Output for listing20.go
Chapter 7. Concurrency patterns
Listing 7.2. runner/runner.go: lines 12–28
Listing 7.3. golang.org/pkg/os/#Signal
Listing 7.4. runner/runner.go: lines 19–20
Listing 7.5. runner/runner.go: lines 22–23
Listing 7.6. runner/runner.go: lines 25–27
Listing 7.7. runner/runner.go: lines 30–34
Listing 7.8. runner/runner.go: lines 36–43
Listing 7.9. runner/runner.go: lines 45–49
Listing 7.10. runner/runner.go: lines 72–85
Listing 7.11. runner/runner.go: lines 87–101
Listing 7.12. runner/runner.go: lines 51–70
Listing 7.13. runner/main/main.go
Listing 7.15. pool/pool.go: lines 12–20
Listing 7.16. pool/pool.go: lines 22–24
Listing 7.17. pool/pool.go: lines 26–38
Listing 7.18. pool/pool.go: lines 40–56
Listing 7.19. pool/pool.go: lines 82–104
Listing 7.20. pool/pool.go: lines 58–80
Listing 7.21. pool/main/main.go
Listing 7.22. pool/main/main.go: lines 21–32
Listing 7.23. pool/main/main.go: lines 34–44
Listing 7.24. pool/main/main.go: lines 48–55
Listing 7.25. pool/main/main.go: lines 57–66
Listing 7.26. pool/main/main.go: lines 68–73
Listing 7.27. pool/main/main.go: lines 76–91
Listing 7.29. work/work.go: lines 07–18
Listing 7.30. work/work.go: lines 20–37
Listing 7.31. work/work.go: lines 28–33
Listing 7.32. work/work.go: lines 39–42
Listing 7.33. work/work.go: lines 44–48
Listing 7.34. work/main/main.go
Chapter 8. Standard library
Listing 8.1. Set of top-level folders and packages in the standard library
Listing 8.2. Sample trace line
Listing 8.4. listing03.go: lines 08–11
Listing 8.5. golang.org/src/log/log.go
Listing 8.6. Declaration of the Ldate constant
Listing 8.7. Use of the keyword iota
Listing 8.8. Declaration of the LstdFlags constant
Listing 8.9. listing03.go: lines 08–11
Listing 8.10. listing03.go: lines 13–22
Listing 8.12. listing11.go: lines 11–16
Listing 8.13. listing11.go: lines 25–39
Listing 8.14. golang.org/src/log/log.go
Listing 8.15. listing11.go: lines 25–27
Listing 8.16. golang.org/src/io/ioutil/ioutil.go
Listing 8.17. listing11.go: lines 29–35
Listing 8.18. golang.org/src/os/file.go
Listing 8.19. listing11.go: lines 37–39
Listing 8.20. Declaration of the MultiWriter function in the io package
Listing 8.21. listing11.go: lines 42–47
Listing 8.22. Declarations of the different logging methods
Listing 8.23. Google search API sample JSON response
Listing 8.25. golang.org/src/encoding/json/stream.go
Listing 8.26. Use of the Decode method
Listing 8.28. Output for listing27.go
Listing 8.30. Syntax for accessing a field from an unmarshaled map
Listing 8.32. golang.org/src/encoding/json/encode.go
Listing 8.33. Declaration of the io.Writer interface
Listing 8.34. Documentation for the io.Writer interface
Listing 8.35. Declaration of the io.Reader interface
Listing 8.36. Documentation for the io.Reader interface
Listing 8.38. Output for listing37.go
Listing 8.39. golang.org/src/fmt/print.go
Listing 8.40. golang.org/src/bytes/buffer.go
Listing 8.41. listing37.go: lines 22–25
Listing 8.42. golang.org/src/os/file.go
Listing 8.43. golang.org/src/os/file_unix.go
Listing 8.44. golang.org/src/os/file.go
Chapter 9. Testing and benchmarking
Listing 9.1. listing01_test.go
Listing 9.2. listing01_test.go: lines 01–10
Listing 9.3. listing01_test.go: lines 12–13
Listing 9.4. listing01_test.go: lines 14–18
Listing 9.5. listing01_test.go: lines 19–21
Listing 9.6. listing01_test.go: lines 22–30
Listing 9.7. listing01_test.go: lines 32–41
Listing 9.8. listing08_test.go
Listing 9.9. listing08_test.go: lines 12–27
Listing 9.10. listing08_test.go: lines 29–34
Listing 9.11. listing08_test.go: lines 35–55
Listing 9.12. listing12_test.go: lines 01–41
Listing 9.13. listing12_test.go: lines 32–40
Listing 9.14. golang.org/pkg/net/http/#HandlerFunc
Listing 9.15. listing12_test.go: lines 43–74
Listing 9.16. listing12_test.go: line 56
Listing 9.18. handlers/handlers.go
Listing 9.19. handlers/handlers_test.go
Listing 9.20. handlers/handlers_test.go: lines 01–03
Listing 9.21. handlers/handlers_test.go: lines 17–19
Listing 9.22. handlers/handlers_test.go: lines 21–34
Listing 9.23. handlers/handlers_test.go: lines 36–39
Listing 9.24. handlers/handlers_test.go: lines 41–49
Listing 9.25. handlers/handlers_test.go: lines 51–63
Listing 9.26. handlers_example_test.go
Listing 9.27. handlers_example_test.go: lines 27–31
Listing 9.28. listing28_test.go: lines 01–10
Listing 9.29. listing28_test.go: lines 12–22
Listing 9.30. listing28_test.go: lines 19–22