From 5ec2c25387af4ad4017099af5380fbe05f87475b Mon Sep 17 00:00:00 2001 From: Unknwon Date: Thu, 5 Mar 2015 02:48:45 -0500 Subject: [PATCH] 9.7 --- README.md | 2 +- eBook/09.6.md | 27 ++++++++++++++------------- eBook/09.7.md | 46 +++++++++++++++++++++++++++------------------- eBook/09.8.md | 43 ++++++++++++++++++++++--------------------- eBook/directory.md | 2 ++ 5 files changed, 66 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index fc16aa9..e225159 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 翻译进度 -9.5 [自定义包和可见性](eBook/09.5.md) +9.7 [使用 go install 安装自定义包](eBook/09.7.md) ## 支持本书 diff --git a/eBook/09.6.md b/eBook/09.6.md index 787b7d1..d57494d 100644 --- a/eBook/09.6.md +++ b/eBook/09.6.md @@ -1,29 +1,29 @@ # 9.6 为自定义包使用 godoc -208 -godoc工具(3.6章节)在显示自定义包中的注释也有很好的效果:注释必须以//开始并无空行放在声明(包,类型,函数)前。godoc会为每个文件生成一系列的网页。 +godoc工具(第 3.6 节)在显示自定义包中的注释也有很好的效果:注释必须以 // 开始并无空行放在声明(包,类型,函数)前。godoc 会为每个文件生成一系列的网页。 例如: --在do_examples目录下我们有11.7章节中的用来排序的go文件,文件中有一些注释(文件需要未编译) - --命令行下进入目录下并输入命令: +- 在 do_examples 目录下我们有第 11.7 节中的用来排序的 go 文件,文件中有一些注释(文件需要未编译) +- 命令行下进入目录下并输入命令: godoc -http =:6060 -paht="." -(.是指当前目录,-path参数可以是/path/to/my/package1这样的形式指出package1在你源码中的位置或接受用冒号形式分隔的路径,无根目录的路径为相对于当前目录的相对路径) +(`.` 是指当前目录,-path 参数可以是 /path/to/my/package1 这样的形式指出 package1 在你源码中的位置或接受用冒号形式分隔的路径,无根目录的路径为相对于当前目录的相对路径) --在浏览器打开地址 http://localhost:6060 +- 在浏览器打开地址:http://localhost:6060 + +然后你会看到本地的 godoc 页面(详见第 3.6 节)从左到右一次显示出目录中的包: -然后你会看到本地的godoc页面(参见3.6章节)从左到右一次显示出目录中的包 doc_example: doc_example | Packages | Commands | Specification -下面是链接到源码和所有对象时有序概述(所以是很好的浏览和查找源代码的方式),连同文件/评论。 +下面是链接到源码和所有对象时有序概述(所以是很好的浏览和查找源代码的方式),连同文件/注释: -sort包 +sort 包 +```go func Float64sAreSorted type IntArray func IntsAreSortedfunc IsSortedfunc Sort @@ -31,6 +31,7 @@ type IntArray func IntsAreSortedfunc IsSortedfunc Sort func (IntArray) Less func SortInts func (IntArray) Swap func SortStrings type Interface func StringsAreSorted type StringArray type Float64Array func (StringArray) Len func (Float64Array) Len func (StringArray) Less func (Float64Array) Less func (StringArray) Swap - func (Float64Array) Swap Other packages import “doc_example” 使用通用的接口排序: - Package files sort.go func Float64sAreSorted[Top] func Float64sAreSorted(a []float64) bool func IntsAreSorted[Top] func IntsAreSorted(a []int) bool func IsSorted[Top] func IsSorted(data Interface) bool Test if data is sorted func Sort[Top] func Sort(data Interface) General sort function func SortInts[Top] func SortInts(a []int) Convenience wrappers for common cases type IntArray[Top] Convenience types for common cases: IntArray type IntArray []int - 如果你在一个团队中工作,并在源代码树被存储在网络硬盘上,就可以使用godoc给所有团队成员连续文档的支持。通过设置sync_minutes=n,你甚至可以让它自动更新您的文档每n分钟! \ No newline at end of file + func (Float64Array) Swap Other packages import “doc_example” ``` 使用通用的接口排序: + ``` func Float64sAreSorted[Top] func Float64sAreSorted(a []float64) bool func IntsAreSorted[Top] func IntsAreSorted(a []int) bool func IsSorted[Top] func IsSorted(data Interface) bool Test if data is sorted func Sort[Top] func Sort(data Interface) General sort function func SortInts[Top] func SortInts(a []int) Convenience wrappers for common cases type IntArray[Top] Convenience types for common cases: IntArray type IntArray []int +``` + 如果你在一个团队中工作,并在源代码树被存储在网络硬盘上,就可以使用 godoc 给所有团队成员连续文档的支持。通过设置 sync_minutes=n,你甚至可以让它每 n 分钟自动更新您的文档! ## 链接 - [目录](directory.md) - 上一节:[自定义包和可见性](09.5.md) - 下一节:[使用 go install 安装自定义包](09.7.md) \ No newline at end of file diff --git a/eBook/09.7.md b/eBook/09.7.md index 82c3d79..c0b1562 100644 --- a/eBook/09.7.md +++ b/eBook/09.7.md @@ -1,37 +1,45 @@ -# 9.7使用go install安装自定义包 +# 9.7 使用 go install 安装自定义包 -go install是Go中自动包安装工具:如需要将包安装到本地它会从远端仓库下载包:检出,编译,安装一气呵成。 +go install 是 Go 中自动包安装工具:如需要将包安装到本地它会从远端仓库下载包:检出,编译,安装一气呵成。 在包安装前的先决条件是要自动处理包自身依赖关系的安装。被依赖的包也会安装到子目录下,但是没有文档和示例:可以到网上浏览。 -被安装包的列表可以在$GORROT/goinstall.log找到。 +被安装包的列表可以在 $GORROT/goinstall.log 找到。 -go install使用了GOPATH变量(参见2.2章节)。 +go install 使用了 GOPATH 变量(详见第 2.2 节)。 -远端包(参见9.5章节): +远端包(详见第 9.5 节): -假设我们要安装一个有趣的包tideland(它包含了许多帮助示例,参见http://code.google.com/p/tideland-cgl)。 +假设我们要安装一个有趣的包 tideland(它包含了许多帮助示例,参见:http://code.google.com/p/tideland-cgl)。 -因为我们需要创建目录在Go安装目录下,所以我们需要使用root或者su的身份执行命令。 +因为我们需要创建目录在 Go 安装目录下,所以我们需要使用 root 或者 su 的身份执行命令。 -确保Go环境变量已经设置在root用户下的./bashrc文件中。 +确保 Go 环境变量已经设置在 root 用户下的 ./bashrc 文件中。 -使用命令安装:go install tideland-cgl.googlecode.com/hg +使用命令安装:`go install tideland-cgl.googlecode.com/hg` -可执行文件hg.a将被放到$GOROOT/pkg/linux_amd64/tideland-cgl.googlecode.com目录下,源码文件被放置在$GOROOT/src/tideland-cgl.googlecode.com/hg目录下,同样有个hg.a放置在_obj的子目录下。 +可执行文件 hg.a 将被放到 $GOROOT/pkg/linux_amd64/tideland-cgl.googlecode.com 目录下,源码文件被放置在 $GOROOT/src/tideland-cgl.googlecode.com/hg 目录下,同样有个 hg.a 放置在 _obj 的子目录下。 -现在就可以在go代码中使用这个包中的功能了,例如使用报名cgl导入: - - import cgl "tideland-cgl.googlecode.com/hg" - -从Go1起go install安装Google Code的导入路径形式是:"code.google.com/p/tideland-cgl" +现在就可以在 go 代码中使用这个包中的功能了,例如使用报名 cgl 导入: + +```go +import cgl "tideland-cgl.googlecode.com/hg" +``` + +从 Go1 起 go install 安装 Google Code 的导入路径形式是:`"code.google.com/p/tideland-cgl"` 升级到新的版本: -更新到新版本的Go之后本地安装包的二进制文件将全被删除。当调用install-a工具将通过读取$GOROOT/goinstall.log重新安装以前的安装包。如果你想更新,重编译,重安装所有的go安装包可以使用:go install -a -u -clean 或者 go install -a -u -nuke +更新到新版本的 Go 之后本地安装包的二进制文件将全被删除。当调用 install -a 工具将通过读取 $GOROOT/goinstall.log 重新安装以前的安装包。如果你想更新,重编译,重安装所有的go安装包可以使用:`go install -a -u -clean` 或者 `go install -a -u -nuke`。 -go的版本发布的很频繁,所以需要注意发布版本和包的兼容性。go1之后都是自己编译自己了。 +go 的版本发布的很频繁,所以需要注意发布版本和包的兼容性。go1 之后都是自己编译自己了。 -go install同样可以使用go install编译链接并安装本地自己的包:参见9.8.2章节。 +go install 同样可以使用 go install 编译链接并安装本地自己的包(详见第 9.8.2 节)。 -更多信息可以在http://golang.org/cmd/go和http://golang.org/cmd/goinstall找到。 \ No newline at end of file +更多信息可以在 http://golang.org/cmd/go 和 http://golang.org/cmd/goinstall 找到。 + +## 链接 + +- [目录](directory.md) +- 上一节:[为自定义包使用 godoc](09.6.md) +- 下一节:[自定义包的目录结构、go install 和 go test](09.8.md) diff --git a/eBook/09.8.md b/eBook/09.8.md index 17c2aa4..55daa25 100755 --- a/eBook/09.8.md +++ b/eBook/09.8.md @@ -1,56 +1,57 @@ -#9.8 自定义包:目录结构,go install和go test +# 9.8 自定义包的目录结构、go install 和 go test +212 为了示范,我们创建了一个名为uc的简单包,它含有一个UpperCase函数将字符串的所有字母转换为大写。当然这并不值得创建一个自己包,同样的功能已被包含在"strings"包里,但是同样的技术也可以应用在更复杂的包中。 ##9.8.1 自定义包的目录结构 -下面的结构给了你一个好的示范(uc代表通用包名, 名字为粗体的代表目录,斜体代表可执行文件): - - /home/user/goprograms ucmain.go (uc包主程序) Makefile (ucmain的2-makefile) ucmain src/uc (包含uc包的go源码) uc.go uc_test.go Makefile (包的1-makefile) uc.a _obj uc.a _test uc.a bin (包含最终的执行文件) ucmain pkg/linux_amd64 uc.a (包的目标文件) +下面的结构给了你一个好的示范(uc代表通用包名, 名字为粗体的代表目录,斜体代表可执行文件): + + /home/user/goprograms ucmain.go (uc包主程序) Makefile (ucmain的2-makefile) ucmain src/uc (包含uc包的go源码) uc.go uc_test.go Makefile (包的1-makefile) uc.a _obj uc.a _test uc.a bin (包含最终的执行文件) ucmain pkg/linux_amd64 uc.a (包的目标文件) 将你的项目放在goprograms目录下(你可以创建一个环境变量GOPATH,参考2.2/3章节:在.profile和.bashrc文件中添加export GOPATH=/home/user/goprograms),而你的项目将作为src的子目录。uc包 中的功能在uc.go中实现。 示例 9.6 [uc.go](examples/chapter_9/uc.go) - + package uc import "strings" - + func UpperCase(str string) string { return strings.ToUpper(str) - } - + } + 包通常附带一个或多个测试文件,在这我们创建了一个uc_test.go文件,如9.8章节所述 示例 9.7 [test.go](examples/chapter_9/uc.go) package uc import "testing" - - type ucTest struct { + + type ucTest struct { in, out string } - + var ucTests = []ucTest { ucTest{"abc", "ABC"}, ucTest{"cvo-az", "CVO-AZ"}, ucTest{"Antwerp", "ANTWERP"}, } - + func TestUC(t *testing.T) { for _, ut := range ucTests { uc := UpperCase(ut.in) if uc != ut.out { - t.Errorf("UpperCase(%s) = %s, must be %s", ut.in, uc, + t.Errorf("UpperCase(%s) = %s, must be %s", ut.in, uc, ut.out) } } } 通过指令编译并安装包到本地:go install src/uc, 这会将uc.a复制到pkg/linux_amd64下面 另外,使用make,通过以下内容创建一个包的Makefile(1)在src/uc目录下: - + include $GOROOT/src/Make.inc - + TARG=uc GOFILES=\ uc.go\ - + include $(GOROOT)/scr/Make.pkg 在该目录下的命令行调用: gomake @@ -73,12 +74,12 @@ "fmt" "./uc/uc" ) - + func main() { str1 := "USING package uc" fmt.Println(uc.UpperCase(str1)) } - + 然后在这个目录下输入go install 另外复制uc.a到uc目录并创建一个Makefile(2)并写入文本: @@ -87,9 +88,9 @@ TARG=ucmain GOFILES=\ ucmain.go\ - + include $GOROOT/src/Make.cmd - + 执行gomake编译ucmain.go到ucmain目录 运行./ucmain显示: USING package uc! @@ -97,7 +98,7 @@ ## 9.8.2 本地安装包 本地包在用户目录下: 使用给出的目录结构,以下命令用来从源码安装本地包: - + go install /home/user/goprograms/src/uc # 编译安装uc cd /home/user/goprograms/uc go install ./uc # 编译安装uc(和之前的指令一样) cd .. go install . # 编译安装ucmain 安装到$GOROOT下: 如果我们想安装的包在系统上的其他Go程序中被使用,它一定要安装到$GOROOT下。 diff --git a/eBook/directory.md b/eBook/directory.md index 72917db..cf0b199 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -79,6 +79,8 @@ - 9.4 [精密计算和 big 包](09.4.md) - 9.5 [自定义包和可见性](09.5.md) - 9.6 [为自定义包使用 godoc](09.6.md) + - 9.7 [使用 go install 安装自定义包](09.7.md) + - 9.8 [自定义包的目录结构、go install 和 go test](09.8.md) - 第10章:结构(struct)与方法(method) - 第11章:接口(interface)与反射(reflection)