没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Learning Go
Go 1
Author:
Miek Gieben
Thanks to:
Go Authors, Google
With the help and contributions from:
(in alphabetical order)
Adam J. Gray, Alex Sychev, Andrea Spadaccini, Andrey Mirtchovski, Anthony Magro, Babu
Sreekanth, Ben Bullock, Bob Cunningham, Brian Fallik, Cecil New, Damian Gryski, Dan
Kortschak, David Otton, Fabian Becker, Filip Zaludek, Hadi Amiri, Haiping Fan, Jaap
Akkerhuis, JC van Winkel, Jeroen Bulten, Jinpu Hu, John Shahid, Jonathan Kans, Joshua
Stein, Makoto Inoue, Mayuresh Kathe, “mem”, Michael Stapelberg, Olexandr Shalakhin,
Paulo Pinto, Peter Kleiweg, Philipp Schmidt, Robert Johnson, Russel Winder, Sonia Keys,
Stefan Schroeder, Thomas Kapplet, T.J. Yang, “Cobold”, “Simoc”, “Uriel”, Xing Xing.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.
Miek Gieben – ©2010 - 2012
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 is hereby put in the public domain.
“Learning Go” has been translated into:
• Chinese, by Xing Xing, 这里是中文译本: http://www.mikespook.com/learning-go/
Learning as we Go (1.0)
Supports the Go 1 release
Contents
1 Introduction 1
Official documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Origins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Getting Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Getting Go for Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Basics 6
Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Compiling and running code . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Settings used in this book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Variables, types and keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Operators and built-in functions . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Go keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Control structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Built-in functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Arrays, slices and maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3 Functions 30
Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Multiple return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Named result parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Deferred code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Variadic parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Functions as values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Panic and recovering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 Packages 48
Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Documenting packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Testing packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Useful packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Beyond the basics 58
Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Defining your own types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
ii
Chapter: Contents
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6 Interfaces 74
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Interface names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A sorting example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7 Concurrency 86
More on channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8 Communication 94
io.Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Some examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Command line arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Executing commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
A Colophon 110
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
License and copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
B Index 112
C Bibliography 114
List of Figures
1.1 Chronology of Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1 Array versus slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1 A simple LIFO stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.1 Peeling away the layers using reflection . . . . . . . . . . . . . . . . . . . . . 81
List of Code Examples
2.1 Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Declaration with = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Declaration with := . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Familiar types are still distinct . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Arrays and slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6 Simple for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
List of Code Examples
iii
2.7 For loop with an array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.8 Fizz-Buzz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.9 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.10 Runes in strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.11 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.7 With defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.8 Function literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.9 Function literal with parameters . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.10 Access return values within defer . . . . . . . . . . . . . . . . . . . . . . . . 34
3.11 Anonymous function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.12 Functions as values in maps . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
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 Test file for even package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4 Stack in a package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5 Push/Pop test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.6 A (rpn) calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1 Use of a pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2 Dereferencing a pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.3 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.4 A generic map function in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.5 Doubly linked list using container/list . . . . . . . . . . . . . . . . . . . . . . 68
5.6 Doubly linked list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.7 A cat program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.1 Defining a struct and methods on it . . . . . . . . . . . . . . . . . . . . . . . 74
6.2 A function with an empty interface argument . . . . . . . . . . . . . . . . . . 76
6.3 Failing to implement an interface . . . . . . . . . . . . . . . . . . . . . . . . 76
6.4 Failure extending built-in types . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.5 Failure extending non-local types . . . . . . . . . . . . . . . . . . . . . . . . 77
6.6 Introspection using reflection . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.7 Reflection and the type and value . . . . . . . . . . . . . . . . . . . . . . . . 81
6.8 Reflect with private member . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.9 Reflect with public member . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.10 Generic way of calculating a maximum . . . . . . . . . . . . . . . . . . . . . 83
7.1 Go routines in action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.2 Go routines and a channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.3 Using select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.4 Channels in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
剩余124页未读,继续阅读
资源评论
Mrizzle
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功