mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 23:08:34 +08:00
精校:9.8-9.8
This commit is contained in:
@@ -19,4 +19,4 @@ Golang 编程:245386165
|
|||||||
|
|
||||||
|更新日期 |更新内容
|
|更新日期 |更新内容
|
||||||
|----------|------------------
|
|----------|------------------
|
||||||
|2015-08-08|9.7 使用 go install 安装自定义包
|
|2015-08-08|9.9 通过 Git 打包和安装
|
4
TOC.md
4
TOC.md
@@ -74,4 +74,6 @@
|
|||||||
- 9.4 [精密计算和 big 包](eBook/09.4.md)
|
- 9.4 [精密计算和 big 包](eBook/09.4.md)
|
||||||
- 9.5 [自定义包和可见性](eBook/09.5.md)
|
- 9.5 [自定义包和可见性](eBook/09.5.md)
|
||||||
- 9.6 [为自定义包使用 godoc](eBook/09.6.md)
|
- 9.6 [为自定义包使用 godoc](eBook/09.6.md)
|
||||||
- 9.7 [使用 go install 安装自定义包](eBook/09.7.md)
|
- 9.7 [使用 go install 安装自定义包](eBook/09.7.md)
|
||||||
|
- 9.8 [自定义包的目录结构、go install 和 go test](eBook/09.8.md)
|
||||||
|
- 9.9 [通过 Git 打包和安装](eBook/09.9.md)
|
@@ -1,14 +1,31 @@
|
|||||||
# 9.8 自定义包的目录结构、go install 和 go test
|
# 9.8 自定义包的目录结构、go install 和 go test
|
||||||
|
|
||||||
为了示范,我们创建了一个名为 uc 的简单包,它含有一个 UpperCase 函数将字符串的所有字母转换为大写。当然这并不值得创建一个自己包,同样的功能已被包含在 "strings" 包里,但是同样的技术也可以应用在更复杂的包中。
|
为了示范,我们创建了一个名为 uc 的简单包,它含有一个 `UpperCase` 函数将字符串的所有字母转换为大写。当然这并不值得创建一个自己包,同样的功能已被包含在 `strings` 包里,但是同样的技术也可以应用在更复杂的包中。
|
||||||
|
|
||||||
## 9.8.1 自定义包的目录结构
|
## 9.8.1 自定义包的目录结构
|
||||||
|
|
||||||
下面的结构给了你一个好的示范(uc 代表通用包名, 名字为粗体的代表目录,斜体代表可执行文件):
|
下面的结构给了你一个好的示范(uc 代表通用包名, 名字为粗体的代表目录,斜体代表可执行文件):
|
||||||
|
|
||||||
/home/user/goprograms
|
/home/user/goprograms
|
||||||
ucmain.go (uc包主程序)
|
ucmain.go (uc包主程序)
|
||||||
Makefile (ucmain的2-makefile)
|
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):
|
示例 9.6 [uc.go](examples/chapter_9/uc.go):
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -53,21 +70,23 @@ func TestUC(t *testing.T) {
|
|||||||
|
|
||||||
另外,使用 make,通过以下内容创建一个包的 Makefile(1) 在 src/uc 目录下:
|
另外,使用 make,通过以下内容创建一个包的 Makefile(1) 在 src/uc 目录下:
|
||||||
|
|
||||||
ucTest{"abc", "ABC"},
|
```
|
||||||
|
include $GOROOT/src/Make.inc
|
||||||
|
|
||||||
ucTest{"Antwerp", "ANTWERP"},
|
TARG=uc
|
||||||
}
|
GOFILES=\
|
||||||
|
uc.go\
|
||||||
|
|
||||||
for _, ut := range ucTests {
|
include $(GOROOT)/scr/Make.pkg
|
||||||
|
```
|
||||||
|
|
||||||
在该目录下的命令行调用: gomake
|
在该目录下的命令行调用: gomake
|
||||||
|
|
||||||
ut.out)
|
这将创建一个 _obj 目录并将包编译生成的存档 uc.a 放在该目录下。
|
||||||
|
|
||||||
}
|
这个包可以通过 go test 测试。
|
||||||
|
|
||||||
```
|
创建一个 ud.a 的测试文件在目录下,输出为 PASS 时测试通过。
|
||||||
|
|
||||||
在第 13.8 节我们将给出另外一个测试例子并进行深入研究。
|
在第 13.8 节我们将给出另外一个测试例子并进行深入研究。
|
||||||
|
|
||||||
@@ -92,32 +111,38 @@ func main() {
|
|||||||
|
|
||||||
然后在这个目录下输入 `go install`。
|
然后在这个目录下输入 `go install`。
|
||||||
|
|
||||||
|
另外复制 uc.a 到 uc 目录并创建一个 Makefile(2) 并写入文本包含在 `$GOROOT/src/Make.inc`:
|
||||||
|
|
||||||
|
```
|
||||||
TARG=ucmain
|
TARG=ucmain
|
||||||
GOFILES=\
|
GOFILES=\
|
||||||
ucmain.go\
|
ucmain.go\
|
||||||
|
|
||||||
include $GOROOT/src/Make.cmd
|
include $GOROOT/src/Make.cmd
|
||||||
|
```
|
||||||
|
|
||||||
"fmt"
|
执行 gomake 编译 `ucmain.go` 到 ucmain 目录
|
||||||
|
|
||||||
)
|
运行 `./ucmain` 显示: `USING package uc!`。
|
||||||
|
|
||||||
## 9.8.2 本地安装包
|
## 9.8.2 本地安装包
|
||||||
|
|
||||||
本地包在用户目录下,使用给出的目录结构,以下命令用来从源码安装本地包:
|
本地包在用户目录下,使用给出的目录结构,以下命令用来从源码安装本地包:
|
||||||
|
|
||||||
```
|
go install /home/user/goprograms/src/uc # 编译安装uc
|
||||||
|
cd /home/user/goprograms/uc
|
||||||
然后在这个目录下输入 `go install`。
|
go install ./uc # 编译安装uc(和之前的指令一样)
|
||||||
|
cd ..
|
||||||
|
go install . # 编译安装ucmain
|
||||||
|
|
||||||
|
安装到 `$GOPATH` 下:
|
||||||
|
|
||||||
GOFILES=\
|
如果我们想安装的包在系统上的其他 Go 程序中被使用,它一定要安装到 `$GOPATH` 下。
|
||||||
|
这样做,在 .profile 和 .bashrc 中设置 `export GOPATH=/home/user/goprograms`。
|
||||||
|
|
||||||
|
然后执行 go install uc 将会复制包存档到 `$GOPATH/pkg/LINUX_AMD64/uc`。
|
||||||
|
|
||||||
|
现在,uc 包可以通过 `import "uc"` 在任何 Go 程序中被引用。
|
||||||
|
|
||||||
## 9.8.3 依赖系统的代码
|
## 9.8.3 依赖系统的代码
|
||||||
|
|
||||||
@@ -125,13 +150,17 @@ uc 包可以通过 "import uc" 在任何 Go 程序中被引用。
|
|||||||
|
|
||||||
你有一个很好的理由去写平台平台特定的代码,例如汇编语言。这种情况下,按照下面的约定是合理的:
|
你有一个很好的理由去写平台平台特定的代码,例如汇编语言。这种情况下,按照下面的约定是合理的:
|
||||||
|
|
||||||
|
prog1.go
|
||||||
本地包在用户目录下,使用给出的目录结构,以下命令用来从源码安装本地包:
|
prog1_linux.go
|
||||||
|
prog1_darwin.go
|
||||||
go install /home/user/goprograms/src/uc # 编译安装uc
|
prog1_windows.go
|
||||||
|
|
||||||
|
prog1.go 定义了不同操作系统通用的接口,并将系统特定的代码写到 prog1_os.go 中。
|
||||||
|
对于 Go 工具你可以指定 `prog1_$GOOS.go` 或 `prog1_$GOARCH.go`
|
||||||
|
或在平台 Makefile 中:`prog1_$(GOOS).go\` 或 `prog1_$(GOARCH).go\`。
|
||||||
|
|
||||||
## 链接
|
## 链接
|
||||||
|
|
||||||
- [目录](directory.md)
|
- [目录](directory.md)
|
||||||
- 上一节:[使用 go install 安装自定义包](09.7.md)
|
- 上一节:[使用 go install 安装自定义包](09.7.md)
|
||||||
安装到 $GOROOT 下:
|
- 下一节:[通过 Git 打包和安装](09.9.md)
|
||||||
|
@@ -1,62 +1,55 @@
|
|||||||
# 9.9 通过 git 打包和安装
|
# 9.9 通过 Git 打包和安装
|
||||||
|
|
||||||
## 9.9.1 安装到 GitHub
|
## 9.9.1 安装到 GitHub
|
||||||
|
|
||||||
以上的方式对于本地包来说是可以的,但是我们如何打包代码到开发者圈子呢?那么我们需要一个云端的源码的版本控制系统,比如著名的 git。
|
以上的方式对于本地包来说是可以的,但是我们如何打包代码到开发者圈子呢?那么我们需要一个云端的源码的版本控制系统,比如著名的 Git。
|
||||||
|
|
||||||
|
在 Linux 和 OS X 的机器上 Git 是默认安装的,在 Windows 上你必须先自行安装,参见 [GitHub 帮助页面](http://help.github.com/win-set-up-git/)。
|
||||||
|
|
||||||
在 Linux 和 OS X 的机器上 git 是默认安装的,在 windows 上你必须先自行安装,参见 http://help.github.com/win-set-up-git/。
|
|
||||||
这里将通过为第 9.8 节中的 uc 包创建一个 git 仓库作为演示
|
这里将通过为第 9.8 节中的 uc 包创建一个 git 仓库作为演示
|
||||||
|
|
||||||
|
进入到 uc 包目录下并创建一个 Git 仓库在里面: `git init`。
|
||||||
|
|
||||||
|
信息提示: `Initialized empty git repository in .../uc`。
|
||||||
|
|
||||||
|
每一个 Git 项目都需要一个对包进行描述的 README 文件,所以需要打开你的文本编辑器(gedit、notepad 或 LiteIde)并添加一些说明进去。
|
||||||
|
|
||||||
|
- 添加所有文件到仓库:`git add README uc.go uc_test.go Makefile`。
|
||||||
然后添加所有文件到仓库:`git add README uc.go uc_test.go Makefile`
|
- 标记为第一个版本:`git commit -m "initial rivision"`。
|
||||||
|
|
||||||
|
现在必须登录 [GitHub 网站](https://github.com)。
|
||||||
|
|
||||||
|
如果您还没有账号,可以去注册一个开源项目的免费帐号。输入正确的帐号密码和有效的邮箱地址并进一步创建用户。然后你将获得一个 Git 命令的列表。本地仓库的操作的命令已经完成。一个优秀的系统在你遇到任何问题的时候将 [引导你](http://help.github.com/)。
|
||||||
|
|
||||||
|
在云端创建一个新的 uc 仓库;发布的指令为(`NNNN` 替代用户名):
|
||||||
|
|
||||||
```
|
```
|
||||||
git remote add orign git@github.com:NNNN/uc.git
|
git remote add orign git@github.com:NNNN/uc.git
|
||||||
git push -u origin master
|
git push -u origin master
|
||||||
```
|
```
|
||||||
|
|
||||||
|
操作完成后检查 GitHub 上的包页面: `http://github.com/NNNN/uc`。
|
||||||
|
|
||||||
## 9.9.2 从 GitHub 安装
|
## 9.9.2 从 GitHub 安装
|
||||||
|
|
||||||
|
如果有人想安装您的远端项目到本地机器,打开终端并执行(NNNN 是你在 GitHub 上的用户名):`go get github.com/NNNN/uc`。
|
||||||
|
|
||||||
|
这样现在这台机器上的其他 Go 应用程序也可以通过导入路径:`"github.com/NNNN/uc"` 代替 `"./uc/uc"` 来使用。
|
||||||
NNNN 是你在 GitHub 上的用户名。
|
|
||||||
|
|
||||||
复制:
|
|
||||||
->uc.a包到目录$GOROOT/PKG/LINUX_AMD64/github.com
|
|
||||||
->源码到$GOROOT/src/pkg/github.com/NNNN/uc
|
|
||||||
|
|
||||||
|
|
||||||
也可以将其缩写为:`import uc "github.com/NNNN/uc"`。
|
也可以将其缩写为:`import uc "github.com/NNNN/uc"`。
|
||||||
|
|
||||||
|
然修改 Makefile: 将 `TARG=uc` 替换为 `TARG-github.com/NNNN/uc`。
|
||||||
|
|
||||||
|
Gomake(和 go install)将通过 `$GOPATH` 下的本地版本进行工作。
|
||||||
|
|
||||||
|
网站和版本控制系统的其他的选择(括号中为网站所使用的版本控制系统):
|
||||||
|
|
||||||
|
- BitBucket(hg/Git)
|
||||||
|
- GitHub(Git)
|
||||||
|
- Google Code(hg/Git/svn)
|
||||||
|
- Launchpad(bzr)
|
||||||
|
|
||||||
|
版本控制系统可以选择你熟悉的或者本地使用的代码版本控制。Go 核心代码的仓库是使用 Mercurial(hg) 来控制的,所以它是一个最可能保证你可以得到开发者项目中最好的软件。Git 也很出名,同样也适用。如果你从未使用过的版本控制,这些网站有一些很好的帮助并且你可以通过在谷歌搜索 "{name} tutorial",其中 name 为你想要使用的版本控制系统得到许多很好的教程。
|
||||||
* bitbucket(hg)
|
|
||||||
* github(git)
|
|
||||||
* googlecode(hg/git/svn)
|
|
||||||
* launchpad(bzr)
|
|
||||||
|
|
||||||
|
|
||||||
## 链接
|
## 链接
|
||||||
|
|
||||||
|
@@ -81,7 +81,7 @@
|
|||||||
- 9.6 [为自定义包使用 godoc](09.6.md)
|
- 9.6 [为自定义包使用 godoc](09.6.md)
|
||||||
- 9.7 [使用 go install 安装自定义包](09.7.md)
|
- 9.7 [使用 go install 安装自定义包](09.7.md)
|
||||||
- 9.8 [自定义包的目录结构、go install 和 go test](09.8.md)
|
- 9.8 [自定义包的目录结构、go install 和 go test](09.8.md)
|
||||||
- 9.9 [通过 git 打包和安装](09.9.md)
|
- 9.9 [通过 Git 打包和安装](09.9.md)
|
||||||
- 9.10 [Go 的外部包和项目](09.10.md)
|
- 9.10 [Go 的外部包和项目](09.10.md)
|
||||||
- 9.11 [在 Go 程序中使用外部库](09.11.md)
|
- 9.11 [在 Go 程序中使用外部库](09.11.md)
|
||||||
- 第10章:[结构(struct)与方法(method)](10.0.md)
|
- 第10章:[结构(struct)与方法(method)](10.0.md)
|
||||||
|
Reference in New Issue
Block a user