mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:34:15 +08:00
Reformat
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
## 翻译进度
|
||||
|
||||
2.8 [Go 解释器](eBook/02.8.md)
|
||||
3.9 [与其它语言进行交互](eBook/03.9.md)
|
||||
|
||||
## 支持本书
|
||||
|
||||
|
@@ -1,9 +1,11 @@
|
||||
#3.0 编辑器、集成开发环境与其它工具
|
||||
# 3.0 编辑器、集成开发环境与其它工具
|
||||
|
||||
因为 Go 语言还是一门相对年轻的编程语言,所以不管是在集成开发环境(IDE)还是相关的插件方面,发展都不是很成熟。不过目前还是有一些 IDE 能够较好地支持 Go 的开发,有些开发工具甚至是跨平台的,你可以在 Linux、Mac OS X 或者 Windows 下工作。
|
||||
|
||||
你可以通过查阅该页面来获取 Go 开发工具的最新信息:[http://go-lang.cat-v.org/text-editors/](http://go-lang.cat-v.org/text-editors/)
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[Go 解释器](02.8.md)
|
||||
- 下一节:[Go 开发环境的基本要求](03.1.md)
|
@@ -1,4 +1,5 @@
|
||||
#3.1 Go 开发环境的基本要求
|
||||
# 3.1 Go 开发环境的基本要求
|
||||
|
||||
这里有一个你可以期待你用来开发 Go 的集成开发环境有哪些特性的列表,从而替代你使用文本编辑器写代码和命令行编译与链接程序的方式。
|
||||
|
||||
1. 语法高亮是必不可少的功能,这也是为什么每个开发工具都提供配置文件来实现自定义配置的原因。
|
||||
@@ -28,7 +29,8 @@
|
||||
25. 集成像 hg 或 git 这样的版本控制工具。
|
||||
26. 集成 Google App Engine 开发及调试的功能。
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[编辑器、集成开发环境与其它工具](03.0.md)
|
||||
- 下一节:[编辑器和集成开发环境](03.2.md)
|
@@ -1,5 +1,4 @@
|
||||
#3.2 编辑器和集成开发环境
|
||||
( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** )
|
||||
# 3.2 编辑器和集成开发环境
|
||||
|
||||
这些编辑器包含了代码高亮和其它与 Go 有关的一些使用工具:Emacs、Vim、Xcode3、KD Kate、TextWrangler、BBEdit、McEdit、TextMate、TextPad、JEdit、SciTE、Nano、Notepad++、Geany、SlickEdit 和 Sublime Text 2。
|
||||
|
||||
@@ -30,7 +29,8 @@
|
||||
|
||||
接下来会对这三个集成开发环境做更加详细的说明。
|
||||
|
||||
##3.2.1 Golang LiteIDE
|
||||
## 3.2.1 Golang LiteIDE
|
||||
|
||||
这款 IDE 的当前最新版本号为 X17,你可以从该页面下载到:[http://code.google.com/p/golangide/](http://code.google.com/p/golangide/)
|
||||
|
||||
LiteIDE 是一款非常好用的轻量级 Go 集成开发环境(基于 QT、Kate 和 SciTE),包含了跨平台开发及其它必要的特性,对代码编写、自动补全和运行调试都有极佳的支持。它采用了 Go 项目的概念来对项目文件进行浏览和管理,它还支持在各个 Go 开发环境之间随意切换以及交叉编译的功能。
|
||||
@@ -39,18 +39,20 @@ LiteIDE 是一款非常好用的轻量级 Go 集成开发环境(基于 QT、Ka
|
||||
|
||||

|
||||
|
||||
图3.1 LiteIDE 代码编辑界面和抽象语法树视图
|
||||
图 3.1 LiteIDE 代码编辑界面和抽象语法树视图
|
||||
|
||||
## 3.2.2 GoClipse
|
||||
|
||||
##3.2.2 GoClipse
|
||||
该款插件的当前最新版本号为 0.7.6,你可以从该页面下载到:[http://code.google.com/p/goclipse/](http://code.google.com/p/goclipse/)
|
||||
|
||||
其依附于著名的 Eclipse 这个大型开发环境,虽然需要安装 JVM 运行环境,但却可以很容易地享有 Eclipse 本身所具有的诸多功能。这是一个非常好的编辑器,完善的代码补全、抽象语法树视图、项目管理和程序调试功能。
|
||||
|
||||

|
||||
|
||||
图3.2 GoClipse 代码编辑界面、抽象语法树视图和项目管理
|
||||
图 3.2 GoClipse 代码编辑界面、抽象语法树视图和项目管理
|
||||
|
||||
## 链接
|
||||
|
||||
##链接
|
||||
- [目录](directory.md)
|
||||
- 上一节:[Go 开发环境的基本要求](03.1.md)
|
||||
- 下一节:[调试器](03.3.md)
|
@@ -1,5 +1,4 @@
|
||||
#3.3 调试器
|
||||
( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** )
|
||||
# 3.3 调试器
|
||||
|
||||
应用程序的开发过程中调试是必不可少的一个环节,因此有一个好的调试器是非常重要的,可惜的是,Go 在这方面的发展还不是很完善。目前可用的调试器是 gdb,最新版均以内置在集成开发环境 LiteIDE 和 GoClipse 中,但是该调试器的调试方式并不灵活且操作难度较大。
|
||||
|
||||
@@ -15,7 +14,8 @@
|
||||
3. 使用 panic 语句(第 13.2 节)来获取栈跟踪信息(直到 panic 时所有被调用函数的列表)。
|
||||
4. 使用关键字 defer 来跟踪代码执行过程(第 6.4 节)。
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[编辑器和集成开发环境](03.2.md)
|
||||
- 下一节:[构建并运行 Go 程序](03.4.md)
|
@@ -1,5 +1,4 @@
|
||||
#3.4 构建并运行 Go 程序
|
||||
( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** )
|
||||
# 3.4 构建并运行 Go 程序
|
||||
|
||||
在大多数 IDE 中,每次构建程序之前都会自动调用源码格式化工具 `gofmt` 并保存格式化后的源文件。如果构建成功则不会输出任何信息,而当发生编译时错误时,则会指明源码中具体第几行出现了什么错误,如:`a declared and not used`。一般情况下,你可以双击 IDE 中的错误信息直接跳转到发生错误的那一行。
|
||||
|
||||
@@ -10,7 +9,8 @@
|
||||
- `go build` 编译并安装自身包和依赖包
|
||||
- `go install` 安装自身包和依赖包
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[调试器](03.3.md)
|
||||
- 下一节:[格式化代码](03.5.md)
|
@@ -1,4 +1,5 @@
|
||||
#3.5 格式化代码
|
||||
# 3.5 格式化代码
|
||||
|
||||
Go 开发团队不想要 Go 语言像许多其它语言那样总是在为代码风格而引发无休止的争论,浪费大量宝贵的开发时间,因此他们制作了一个工具:`go fmt`(`gofmt`)。这个工具可以将你的源代码格式化成符合官方统一标准的风格,属于语法风格层面上的小型重构。遵循统一的代码风格是 Go 开发中无可撼动的铁律,因此你必须在编译或提交版本管理系统之前使用 `gofmt` 来格式化你的代码。
|
||||
|
||||
尽管这种做法也存在一些争论,但使用 `gofmt` 后你不再需要自成一套代码风格而是和所有人使用相同的规则。这不仅增强了代码的可读性,而且在接手外部 Go 项目时,可以更快地了解其代码的含义。此外,大多数开发工具也都内置了这一功能。
|
||||
@@ -17,7 +18,7 @@ Go 对于代码的缩进层级方面使用 tab 还是空格并没有强制规定
|
||||
|
||||
gofmt -r “a[n:len(a)] -> a[n:]” –w *.go
|
||||
|
||||
上面的代码会将源文件中多余的 `len(a)` 去掉。( ***译者注:了解 slice 之后就明白这为什么是多余的了*** )
|
||||
上面的代码会将源文件中多余的 `len(a)` 去掉。( **译者注:了解 slice 之后就明白这为什么是多余的了** )
|
||||
|
||||
gofmt –r ‘A.Func1(a,b) -> A.Func2(b,a)’ –w *.go
|
||||
|
||||
@@ -25,7 +26,8 @@ Go 对于代码的缩进层级方面使用 tab 还是空格并没有强制规定
|
||||
|
||||
如果想要了解有关 `gofmt` 的更多信息,请访问该页面:[http://golang.org/cmd/gofmt/](http://golang.org/cmd/gofmt/)
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[构建并运行 Go 程序](03.4.md)
|
||||
- 下一节:[生成代码文档](03.6.md)
|
@@ -1,4 +1,5 @@
|
||||
#3.6 生成代码文档
|
||||
# 3.6 生成代码文档
|
||||
|
||||
`go doc` 工具会从 Go 程序和包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档。
|
||||
|
||||
它也可以作为一个提供在线文档浏览的 web 服务器,[http://golang.org](http://golang.org) 就是通过这种形式实现的。
|
||||
@@ -15,7 +16,8 @@
|
||||
|
||||
如果想要获取更多有关 `godoc` 的信息,请访问该页面:[http://golang.org/cmd/godoc/](http://golang.org/cmd/godoc/)
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[格式化代码](03.5.md)
|
||||
- 下一节:[其它工具](03.7.md)
|
@@ -1,11 +1,13 @@
|
||||
#3.7 其它工具
|
||||
# 3.7 其它工具
|
||||
|
||||
Go 自带的工具集主要使用脚本和 Go 语言自身编写的,目前版本的 Go 实现了以下三个工具:
|
||||
|
||||
- `go install` 是安装 Go 包的工具,类似 Ruby 中的 rubygems。主要用于安装非标准库的包文件,将源代码编译成对象文件。
|
||||
- `go fix` 用于将你的 Go 代码从旧的发行版迁移到最新的发行版,它主要负责简单的、重复的、枯燥无味的修改工作,如果像 API 等复杂的函数修改,工具则会给出文件名和代码行数的提示以便让开发人员快速定位并升级代码。Go 开发团队一般也使用这个工具升级 Go 内置工具以及 谷歌内部项目的代码。`go fix` 之所以能够正常功能是因为 Go 在标准库就提供生成抽象语法树和通过抽象语法树对代码进行还原的功能。该工具会尝试更新当前目录下的所有 Go 源文件,并在完成代码更新后在控制台输出相关的文件名称。
|
||||
- `go test` 是一个轻量级的单元测试框架(第 13 章)。
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[生成代码文档](03.6.md)
|
||||
- 下一节:[Go 性能说明](03.8.md)
|
@@ -1,5 +1,6 @@
|
||||
#3.8 Go 性能说明
|
||||
根据 Go 开发团队和基本的算法测试,Go 的性能大概在 C 语言的 10%~20% 之间( ***译者注:由于出版时间限制,该数据应为2013年3月28日之前产生*** )。虽然没有官方的性能标准,但是与其它各个语言相比已经拥有非常出色的表现。
|
||||
# 3.8 Go 性能说明
|
||||
|
||||
根据 Go 开发团队和基本的算法测试,Go 的性能大概在 C 语言的 10%~20% 之间( **译者注:由于出版时间限制,该数据应为 2013 年 3 月 28 日之前产生** )。虽然没有官方的性能标准,但是与其它各个语言相比已经拥有非常出色的表现。
|
||||
|
||||
如果说 Go 语言的执行效率大约比 C++ 慢 20% 也许更有实际意义。保守估计在相同的环境和执行目标的情况下,Go 程序比 Java 或 Scala 应用程序要快上 2 倍,并比这两门语言使用少占用 70% 的内存。在很多情况下这种比较是没有意义的,因为像谷歌这样拥有成千上万台服务器的公司都抛弃 C++ 而开始将 Go 用于生产环境已经足够说明它本身所具有的优势。
|
||||
|
||||
@@ -19,16 +20,13 @@
|
||||
- 根据 Robert Hundt(2011 年 6 月,详见引用 28)的文章对 C++、Java、Go 和 Scala,以及 Go 开发团队的反应(详见引用 29),可以得出以下结论:
|
||||
|
||||
- Go 和 Scala 之间具有更多的可比性(都使用更少的代码),而 C++ 和 Java 都使用非常冗长的代码。
|
||||
|
||||
- Go 的编译速度要比绝大多数语言都要快,比 Java 和 C++ 快 5 至 6 倍,比 Scala 快 10 倍。
|
||||
|
||||
- Go 的二进制文件体积是最大的(每个可执行文件都包含 runtime)。
|
||||
|
||||
- 在最理想的情况下,Go 能够和 C++ 一样快,比 Scala 快 2 至 3 倍,比 Java 快 5 至 10 倍。
|
||||
|
||||
- Go 在内存管理方面也可以和 C++ 相媲美,几乎只需要 Scala 所使用的一半,比 Java 少 4 倍左右。
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[其它工具](03.7.md)
|
||||
- 下一节:[与其它语言进行交互](03.9.md)
|
@@ -1,5 +1,7 @@
|
||||
#3.9 与其它语言进行交互
|
||||
##3.9.1 与 C 进行交互
|
||||
# 3.9 与其它语言进行交互
|
||||
|
||||
## 3.9.1 与 C 进行交互
|
||||
|
||||
工具 cgo 提供了对 FFI(外部函数接口)的支持,能够使用 Go 代码安全地调用 C 语言库,你可以访问 cgo 文档主页:[http://golang.org/cmd/cgo](http://golang.org/cmd/cgo)。cgo 会替代 Go 编译器来产生可以组合在同一个包中的 Go 和 C 代码。在实际开发中一般使用 cgo 创建单独的 C 代码包。
|
||||
|
||||
如果你想要在你的 Go 程序中使用 cgo,则必须在单独的一行使用 `import "C"` 来导入,一般来说你可能还需要 `import "unsafe"`。
|
||||
@@ -65,7 +67,8 @@ Example 3.3 [c2.go](examples/chapter_3/CandGo/c2.go)
|
||||
c1.go\
|
||||
include $(GOROOT)/src/Make.pkg
|
||||
|
||||
#3.9.2 与 C++ 进行交互
|
||||
# 3.9.2 与 C++ 进行交互
|
||||
|
||||
SWIG(简化封装器和接口生成器)支持在 Linux 系统下使用 Go 代码调用 C 或者 C++ 代码。这里有一些使用 SWIG 的注意事项:
|
||||
|
||||
- 编写需要封装的库的 SWIG 接口。
|
||||
@@ -77,7 +80,8 @@ SWIG(简化封装器和接口生成器)支持在 Linux 系统下使用 Go
|
||||
|
||||
目前使用 SWIG 存在的一个问题是它无法支持所有的 C++ 库,比如说它就无法解析 TObject.h。
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[Go 性能说明](03.8.md)
|
||||
- 下一部分:[语言的核心结构与技术](04.1.md)
|
Reference in New Issue
Block a user