Learning Go - Gieben (2011).pdf
(
1438 KB
)
Pobierz
727162727 UNPDF
Learning Go
Authors:
Miek Gieben
Thanks to:
Go Authors
Google
Go Nuts mailing list
This work is licensed under the
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
.
Miek Gieben – ©2010, 2011
This work is licensed under the Attribution-NonCommercial-ShareAlike 3.0 Unported
License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc-sa/3.0/
or send a letter to Creative
Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
All example code used in this book, are hereby put in the public domain.
Learning as we Go
(
0.5
)
Updated to Go release
weekly/weekly.2011-08-10
Contents
1 Introduction
1
Official documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Getting Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Origins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Basics
6
Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Compiling and running code . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Variables, types and keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Operators and built-in functions . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Go keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Control structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Built-in functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Arrays, slices and maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3 Functions
30
Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Multiple return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Named result parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Deferred code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Variadic parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Functions as values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Panic and recovering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 Packages
48
Building a package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Documenting packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Testing packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Useful packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5 Beyond the basics
60
Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Defining your own types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
ii Chapter: Contents
6 Interfaces
72
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Interface names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
A sorting example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7 Concurrency
84
More on channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8 Communication
92
Files and directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Command line arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Executing commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
A Colophon
106
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
License and copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
B Index
108
C Bibliography
110
List of Figures
1.1 Chronology of Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1 Array versus slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1 A simple LIFO stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.1 Peeling away the layers using reflection . . . . . . . . . . . . . . . . . . . . . 79
List of Code Examples
2.1 Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Makefile for a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Declaration with = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Declaration with := . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Familiar types are still distinct . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6 Arrays and slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7 Simple for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.8 For loop with an array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.9 Fizz-Buzz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
List of Code Examples iii
2.10 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.11 Runes in strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.12 Reverse a string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1 A function declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2 Recursive function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3 Local scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4 Global scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.5 Scope when calling functions from functions . . . . . . . . . . . . . . . . . . . 32
3.6 Without defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.7 With defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.8 Function literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.9 Function literal with parameters . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.10 Access return values within defer . . . . . . . . . . . . . . . . . . . . . . . . 36
3.11 Anonymous function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.12 Functions as values in maps . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.13 Average function in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.14 stack.String() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.15 A function with variable number of arguments . . . . . . . . . . . . . . . . . 43
3.16 Fibonacci function in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.17 A Map function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.18 Bubble sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1 A small package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2 Use of the even package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3 Makefile for a package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4 Test file for even package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5 Stack in a package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6 Push/Pop test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.7 Package Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.8 A (rpn) calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.1 Use of a pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2 Dereferencing a pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.4 A generic map function in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.5 A cat program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.1 Defining a struct and methods on it . . . . . . . . . . . . . . . . . . . . . . . 72
6.2 A function with an empty interface argument . . . . . . . . . . . . . . . . . . 74
6.3 Failing to implement an interface . . . . . . . . . . . . . . . . . . . . . . . . 74
6.4 Failure extending built-in types . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.5 Failure extending non-local types . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.6 Introspection using reflection . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.7 Reflection and the type and value . . . . . . . . . . . . . . . . . . . . . . . . 79
6.8 Reflect with private member . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.9 Reflect with public member . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.10 Generic way of calculating a maximum . . . . . . . . . . . . . . . . . . . . . 81
7.1 Go routines in action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.2 Go routines and a channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3 Using select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.4 Channels in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.5 Adding an extra quit channel . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.6 A Fibonacci function in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Plik z chomika:
Iskraa
Inne pliki z tego folderu:
Learning Go - Gieben (2011).pdf
(1438 KB)
Inne foldery tego chomika:
!3d programing
!Agile - Best Practices
!AI
!AJAX
!algorytmika
Zgłoś jeśli
naruszono regulamin