ruby on rails视频教程编程语言从入门到精通全集128整电子go语言学习_第1页
ruby on rails视频教程编程语言从入门到精通全集128整电子go语言学习_第2页
ruby on rails视频教程编程语言从入门到精通全集128整电子go语言学习_第3页
ruby on rails视频教程编程语言从入门到精通全集128整电子go语言学习_第4页
ruby on rails视频教程编程语言从入门到精通全集128整电子go语言学习_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习Go 语言作者:感谢:Go 作者Miek Gieben译者:Go Nuts 邮件列表This work is licensed under the Creative Commonsmer l-ShareAlike 3.0 License.Miek Gieben 2010, 2011 2011本作品依照署名-非商业性使用-相同方式共享3.0 Unportedmons./licenses/by-nc-sa/3.0/ 查看该证发布 访证副本,或写信问到Creative Commons, 171 Second Street, Suite 300, San Francisco, California

2、, 94105, USA本书所有实例代码依此方式放入公共领域让开始学习Go 吧版本 0.4更新至Go 版本release.2011-03-07Table of Contents简介文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .获得Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1vivii vii前身练习. . . . . . . . . . . . . . . . . . .

3、. . . . . . . . . . . . . . . . . . . . . viii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xi基础o World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .编译和运行代码

4、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .变量 类型和保留字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .运算符和内建函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Go 保留字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .控制结构 .

5、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .内建函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .array sli和map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1123677121318192函数作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .多个返回值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .命名返回参数 . . . . . . . . . . . .

7、. . . . . . . . . . . . . . . . . . . . . . .延迟的代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .变参 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .函数作为值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .回调和闭包 . . . . .

8、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(Panic)和恢复(Recover) . . . . . . . . . . . . . . . . . . . . . . . . .32425262728293030313135练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9、. . . . . . . .包 构建44243444545474849个包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .标识符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .包的文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .测试包 . . . . . . . . . . . .

10、 . . . . . . . . . . . . . . . . . . . . . . . . . . .常用的包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .进阶内存分配

11、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .定义自己的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5525355575861接口方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .接口名字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .简短的例子 . . . . . . . . . . . .

13、. . . . . . . . . . . . . . . . . . . . . . . . .664666767697375自省练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14、. .并发关于 channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .776787881练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .通讯文件88484858586868689. . . . . . . . . . . . . . .

15、. . . . . . . . . . . . . . . . . . . . . . . . .命令行参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .执行命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Netchan 网络

16、和 channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A969697贡献者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17、. . . . . . . .证和. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .索引B98CBibliography100List of FiguresGo 编年史viii1.12.1array 与 slice 对比 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15个简单的 LIFO 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.1325.

18、1Poers and types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526.1使用反射去除层次关系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72List of Tables2.1运算优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2Go 中的保留字 . . . . . . . . . . . . . . . . . . .

19、 . . . . . . . . . . . . . . .2.3Go 中的预定义函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6712iiChapter: Table of Contents5.1Valid convers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57List of Code Exleso world . . . . . . . . . . . . .

20、. . . . . . . . . . . . . . . . . . . . . . .Makefile for a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Declaration with. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Declaration with :. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Familiar type

21、s are still distinct . . . . . . . . . . . . . . . . . . . . . . . . . .array 和 slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Simple for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23334161919202121222425252525282829292930303537373838394242434

22、64949525255616264656666For loop win array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Fizz-Buzz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.10 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.11 Runes in strings . . .

23、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.12 Reverse a string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.1 函数定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.2 递归函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24、 . . . . . . .3.3 局部作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.4 全局作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.5 当函数调用函数时的作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.6 没有defer . . . . . . . . . . . . . . . . . . . .

25、. . . . . . . . . . . . . . . . .3.7 With defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.8 函数符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.9 带参数的函数符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.10 在defer 中返回值 . .

26、. . . . . . . . . . . . . . . . . . . . . . . . . . . .3.11 Anonymous function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.12 使用map 的函数作为值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.13 Go 中的平均值函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.14

27、 stack.String() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.15 有变参的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.16 Fibonacci function in Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.17 Map 函数 . . . . . . . . . . . . . . . . . .

28、 . . . . . . . . . . . . . . . . . . . .3.18 Bubble sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A small package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Use of the even package . . . . . . . . . .

29、. . . . . . . . . . . . . . . . . . .用于包的Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .even 包的测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .包里的Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .逆波兰计算器 . . . . . . . . . . . .

30、 . . . . . . . . . . . . . . . . . . . . . . .Use of a poer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .获取指针指向的值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Go 中更加通用的map 函数

31、 . . . . . . . . . . . . . . . . . . . . . . . . . . . .cat 程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .定义结构和结构的方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .实现了I 的另 个类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .空接口参数的函数t . . . . .

32、 . . . . . . . . . . . . . . . . . . . . . . . . . . .接口实现异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .List of Code Exlesiii6.5 扩展内建类型错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.6 扩展非本地类型错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33、 . . .6.7 动态的找到类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.8 更普通的 type switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.9 使用反射自省 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.10 反射类型和值 . . . . . . . . . . . . . . . . . . . . .

34、 . . . . . . . . . . . . . .6.11 私有成员的反射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.12 公有成员的反射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67676970717273737677788181828484878789909198.78.8Go routine 实践 . . . . . .

35、. . . . . . . . . . . . . . . . . . . . . . . . . . . .Go routines 和 channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .使用 select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Go 的 channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .添

36、加额外的退出 channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Go 的从文件从文件函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(无缓冲) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(缓冲) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Proses in Perl . .

37、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .uniq(1) 的 Perl 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Go 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .wc(1) 的Go 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38、.uniq(1) 的Go 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .数字. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .List of Exercises123456789101112131415161718192021222324(1)ationviii(1) For-loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39、 . . .(1) FizzBuzz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(1) Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(4) Average . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(4) 平均值 . . . . . . . . . . . . . . . . .

40、. . . . . . . . . . . . . . . . . . . .(3) 整数顺序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(4) 作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(5) 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(5) 变参 . . . . .

41、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1818181831313132323232323233484858585858587373(5). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(4) Map function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(3) 最小值和最大值 . . . . . . . . . . .

42、 . . . . . . . . . . . . . . . . . . . . .(5) 冒泡排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(6) 函数返回 个函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(2) stack 包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(7) 计算器 . . . . . . .

43、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(6) 使用(6) 指针(6) 链表(6) Cat .erface 的map 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(8) 方法调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(6) 接口和编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(5) 指针和反射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45、. . . . .ivChapter: Table of Contents(1) 接口和最大最小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(4) Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25262728293031327378798687878888(7)II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46、 .(8) 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(5) 单词和字母统计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(4) Uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(9) Quine . . . . . . . . . . . . . . . . . . . . . . . .

47、 . . . . . . . . . . . . .(9) 数字. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .List of Exercisesv简介我对此感,并且希望做点什么在为Go 添加复数支持时KEN THOMPSON这是关于来自Go?来自于的Go 语言的简介 目标是为这个新的9:性的语言提供 个指南Go 编程语言是 个使得程序员更加有效率的开源项目 Go 是有表达力 简洁 清晰和有效率的 它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序 Go 编译到机器码

48、非常快速,同时具有便利的回收和强大的运行时反射 它是快速的 静态类型编译语言,但是感觉上是动态类型的,解释型语言这本书的目标读者是那些熟悉编程,并且了解多种编程语言,例如C19,C+29,Perl 21,Java 20,Erlang18,Scala1,Haskell10 这不是教你如何编程的书,只是教你如何使用Go学习 样新东西,最佳的方式可能是通过建立自己的程序来探索它 因此每章都包含了若 练习(和)让你熟悉这个语言 练习标有Qn,而n 是 个数字 在练习后面的圆括号中指定了该题的难度 难度范围从0 到9,0 是最简单,而9 最难 其后为了容易索引,提供了 个简短的名字 例如Q1. (1)

49、map 函数展示了难度等级1Q1 的关于map() 函数除了那些麻烦的 未解决的问题,相关在练习的下 页的顺序和练习 致,而对于以An 开头,对应n 的练习Go 是 个年轻的语言,特性仍然在不断增加或删除中 所以当你阅读的时候,可能部分内容已经过时些练习的可能会随着Go 不断的演化而变成错误的尽可能让这个文档与的Go 发布版本保持 致 通过努力已经建立了“特性检验”代码示例本书使用了下面的约定代码用DejaVu Mono 显示用DejaVu Mono Bold 显示注释用DejaVu Mono Italic 显示代码中额外的标记, 用这种形式展现使用数字 1 对长内容标记解释会跟随其后行号在右

50、边展示 S示例用% 作为标记强调的段落会缩进,在左边有竖线1文档Go 已经有大量的文档 例如Go Tutorial 8 和Effective Go 3doc/ 是绝佳的起点a 虽然并不 定要阅读这些文档,但是强烈建议这么做Go 用叫做godoc 的Go 程序格式化其文档 你可以用它查阅文档 例如,假设需要了解关于hash 包的文档在第4 章中介绍信息 可以用命令godoc hash 查阅它 如何创建你自己的包的获得Go当前(2011)任何Linux版都没有提供Go 安装包 安装Go 的过程因此也比预期的要稍微长 些 当Go 稳定之后,这 情况应该会得到改善 现在来说,你需要从mercurial

51、 中获取源代码,然后编译Go 对于其他类Unix 系统,过程类似首先安装Mercurial (获取hg 命令) 在Ubuntu/Debian/Fedora 需要安装mercurial包为了编译Go 需要包 bison,gcc,libc6-dev,ed,gawk 和make设置环境变量GOROOT 为Go 安装目录% export GOROOT=/go然后获取Go 源代码% hg clone -r release https:/hg/ $GOROOT设置PATH 到Go 的 进制文件所在目录,这样S% export PATH=$GOROOT/bin:$PATH可以找到它们编译Go% cd $GO

52、ROOT/src% ./all.bash如果全部都没问题,你应当看到下面的内容Installed Go for linux/amd64 in /home/gobook/go.Installedds in /home/gobook/go/bin.The compiler is 6g.现在,Go 已经被安装到了系统中,可以开始了保持更新新的发布会在Go Nuts 邮件列表17 中 将已经存在的代码树更新到,需要执行% cd $GOROOT% hg pull% hg update release% cd src% ./all.basha本身是由Go 程序godoc 提供服务的。文档vii看看你现在用

53、的版本% cd $GOROOT% hg identify79997f0e5823 release/release.2010-10-20这是release.2010-10-20 版本前身Go 的前身来自于Inferno 11 (基于Plan 9 14 的改造) Inferno 包含了 个叫做Limbo13 的语言 来自于Limbo中的Limbo 是用于开发运行在小型计算机上的分布式应用的编程语言 它支持模块化编程,编译期和运行时的强类型检查,进程内基于具有类型的channel 通讯,原子性收集,和简单的抽象数据类型 它被设计用于即便是没有硬件内存保护的小型设备上,也能安全的运行Limbo 的 个

54、特性已经包含进了Go 用于支持交叉编译Go 从Limbo 继承的另 个特性是channel(参阅第7 章) 从Limbo 文档来的另 段TODOPlan 9 上的首席语言在1995 年提出channel 是用于向系统中其他发送和接收特定类型对象的通讯机制 channel可以用于本地进程间通讯 用于连接到命名的目的地的库方法 两种情况都是直接发送和接收操作的在Go 中,channel 比在Limbo 中更加好用 如果对Go 的历史深入探索,会发现 个到”Newsqueak” 28 的,这是在类C 语言中使用channel 通讯的拓荒者 channel 对于这些语言并不是独 无 的,另个非类C 语

55、言,Erlang 18,也在使用它Figure 1.1. Go 编年史1986Erlang1994 1995Newsqueak Limbo2009Go使用channel 与其他进程进行通讯的办法,叫做通讯序列化过程(Communicating Sequential Pro ses - CSP),由C. A. R. Hoare 23 设计构想,而他正是那个发明快速排序24 算法的人Go 是第 个实现了简单的(或更加简单的)并行开发的 夸类C 语言练习Q1. (1)ation1. Go 的文档可以通过godoc 程序阅读,它包含在Go 的发布包中godoc hash 给出了hash 包的信息 阅读

56、container 包的帮助,给出了下面的结果viiiChapter 1: 简介SUBDIRECTORIESheap list ringvector哪个godoc令可以显示container 包中的vector 文档?练习ixA1. (1)ation1. vector 包在container 的子目录中,所以只需要 godoc container/vector 即可也可以指定“Go 手册”中某个函数的的文档 例如,函数Prf 在fmt 包中,仅阅读这个函数的文档,使用 godoc fmt Pr甚至可以显示源代码 godoc -src fmt Prffxi基础在Go 中,代码说到做到Go Nut

57、s 邮件列表ANDREW GERRAND有 些东西使得Go 不同于其他语言清晰并且简洁Go 努力保持小并且优美,你可以在短短几行代码里做许多事情并行Go 让函数很容易成为非常轻量的线程 这些线程在Go 中被叫做goroutines aChannel这些goroutines 之间的通讯由channel 3323 完成快速编译很快,执行也很快 目标是跟C样快 编译时间用秒计算安全Go 有收集,在Go 中无须free(),语言会处理这 切标准的格式化Go 程序可以被格式化为程序员希望的(几乎),但是格式是存在的标准也非常简单 gofmt 的输出就是认可的格式类型后置类型在变量名的后面,像这样var

58、a,来代替C 中的a;UTF-8任何地方都是UTF-8的,包括字符串以及程序代码 你可以在代码中使用 = +1开源Go 的证是完全开源的,查阅Go 发布的源码中的LICENSE 文件开心用Go 写程序会非常开心Erlang 18 与Go 在部分功能上类似 Erlang 和Go 之间主要的区别是Erlang 是函数式语言,而Go 是命令式的 Erlang 运行在虚拟机上,而Go 是编译的 Go 用起来感觉更接近Unixo World在Go 指南中, 用 个传统的方式展现了Go 让它打印”o World” (Ken Thompson和Dennis Ritchie 在20 世纪70 年代,发布C 语

59、言的时候开创了这个先河)不认为可以做得更好,所以就是这个,Go 的”o World”a是的,它的发音很接近coroutines,但是goroutines 确实有一些不同,在第7 章。2Listing 2.1.o world0package main11import fmt / 实现格式化的I/O32/* Prsomething */53func main() 46789 ; or世界n)o, world; or fmt.Prf(逐行阅读这个程序0首行这个是必须的 所有的Go 文件以package 开头,对于独立运行的执行文件必须是package main1这是说需要将”fmt” 包加入main

60、 不是main 的其他被称为库,其他许多编程语言有着类似的概念(参阅第4 章) 末尾以/ 开头的内容是注释2这同样是注释,不过这是被于/* 和*/ 之间的3package main 必须首先出现,紧跟着是import 在Go 中,package 总是首先出现,然后是import,然后是其他所有内容 当Go 程序在执行的时候,首先调用的函数是ma,这是从C 中继承而来 这里定义了这个函数ain()4第8 行调用了来自于fmt 包的函数打印字符串到屏幕 字符串由非ASCII 的字符 这里使用了希腊文和日文,并且可以包含编译和运行代码Go 编译器叫做g,数字是6 表示用于64 位el 而8 表示32

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论