回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,10 +1,10 @@
### 10.7.3. 建包
### 10.7.3. 建包
`go build`命令編譯命令行參數指定的每包。如果包是一個庫,則忽略輸出結果;可以用於檢測包的可以正確編譯的。如果包的名字是main`go build`將調用連接器在前目録創建一個可執行程序;以入路的最一段作爲可執行程序的名字。
`go build`命令编译命令行参数指定的每包。如果包是一个库,则忽略输出结果;可以用于检测包的可以正确编译的。如果包的名字是main`go build`将调用连接器在前目录创建一个可执行程序;以入路的最一段作为可执行程序的名字。
爲每個目録隻包含一包,因此每個對應可執行程序或者叫Unix術語中的命令的包,要求放到一個獨立的目中。些目録有時候會放在名叫cmd目的子目下面,例如用提供Go文檔服務的golang.org/x/tools/cmd/godoc命令就是放在cmd子目§10.7.4)。
为每个目录只包含一包,因此每个对应可执行程序或者叫Unix术语中的命令的包,要求放到一个独立的目中。些目录有时候会放在名叫cmd目的子目下面,例如用提供Go文档服务的golang.org/x/tools/cmd/godoc命令就是放在cmd子目§10.7.4)。
包可以由它們的導入路指定,就像前面看到的那,或者用一個相對目録的路知指定,相對路徑必須`.``..`開頭。如果有指定參數,那麽默認指定爲當前目録對應的包。 下面的命令用於構建同一包, 然它們的寫法各不相同:
包可以由它们的导入路指定,就像前面看到的那,或者用一个相对目录的路知指定,相对路径必须`.``..`开头。如果有指定参数,那么默认指定为当前目录对应的包。 下面的命令用于构建同一包, 然它们的写法各不相同:
```
$ cd $GOPATH/src/gopl.io/ch1/helloworld
@@ -25,7 +25,7 @@ $ cd $GOPATH
$ go build ./src/gopl.io/ch1/helloworld
```
但不能這樣
但不能这样
```
$ cd $GOPATH
@@ -33,7 +33,7 @@ $ go build src/gopl.io/ch1/helloworld
Error: cannot find package "src/gopl.io/ch1/helloworld".
```
也可以指定包的源文件列表,一般這隻用於構建一些小程序或做一些臨時性的實驗。如果是main包將會以第一Go源文件的基文件名作爲最終的可行程序的名字。
也可以指定包的源文件列表,一般这只用于构建一些小程序或做一些临时性的实验。如果是main包将会以第一Go源文件的基文件名作为最终的可行程序的名字。
```
$ cat quoteargs.go
@@ -52,22 +52,22 @@ $ ./quoteargs one "two three" four\ five
["one" "two three" "four five"]
```
特别是對於這類一次性行的程序,我希望快的構建併運行它。`go run`命令實際上是合了建和行的兩個步驟
特别是对于这类一次性行的程序,我希望快的构建并运行它。`go run`命令实际上是合了建和行的两个步骤
```
$ go run quoteargs.go one "two three" four\ five
["one" "two three" "four five"]
```
第一行的參數列表中,第一不是以`.go`尾的將作爲可執行程序的參數運行。
第一行的参数列表中,第一不是以`.go`尾的将作为可执行程序的参数运行。
認情況下,`go build`命令建指定的包和它依的包,然後丟棄除了最的可行文件之外所有的中間編譯結果。依分析和編譯過程雖然都是很快的,但是隨着項目增加到幾十個包和成韆上萬行代,依賴關繫分析和編譯時間的消耗將變的可,有候可能需要幾秒種,卽使這些依賴項沒有改
认情况下,`go build`命令建指定的包和它依的包,然后丢弃除了最的可行文件之外所有的中间编译结果。依分析和编译过程虽然都是很快的,但是随着项目增加到几十个包和成千上万行代,依赖关系分析和编译时间的消耗将变的可,有候可能需要几秒种,即使这些依赖项没有改
`go install`命令和`go build`命令很相似,但是它保存每包的編譯成果,而不是將它們都丟棄。被編譯的包被保存到$GOPATH/pkg目下,目録路徑和 src目録路徑對應,可行程序被保存到$GOPATH/bin目。(很多用戶會將$GOPATH/bin添加到可行程序的索列表中。)有,`go install`命令和`go build`命令都不重新編譯沒有發生變化的包,可以使後續構建更快捷。了方便編譯依賴的包,`go build -i`命令將安裝每個目標所依的包。
`go install`命令和`go build`命令很相似,但是它保存每包的编译成果,而不是将它们都丢弃。被编译的包被保存到$GOPATH/pkg目下,目录路径和 src目录路径对应,可行程序被保存到$GOPATH/bin目。(很多用户会将$GOPATH/bin添加到可行程序的索列表中。)有,`go install`命令和`go build`命令都不重新编译没有发生变化的包,可以使后续构建更快捷。了方便编译依赖的包,`go build -i`命令将安装每个目标所依的包。
爲編譯對應不同的操作繫統平台和CPU架`go install`命令會將編譯結果安到GOOS和GOARCH對應的目。例如在Mac繫統golang.org/x/net/html包被安到$GOPATH/pkg/darwin_amd64目下的golang.org/x/net/html.a文件。
为编译对应不同的操作系统平台和CPU架`go install`命令会将编译结果安到GOOS和GOARCH对应的目。例如在Mac系统golang.org/x/net/html包被安到$GOPATH/pkg/darwin_amd64目下的golang.org/x/net/html.a文件。
針對不同操作繫統或CPU的交叉建也是很簡單的。需要置好目標對應的GOOS和GOARCH後運行構建命令可。下面交叉編譯的程序將輸出它在編譯時操作繫統和CPU型:
针对不同操作系统或CPU的交叉建也是很简单的。需要置好目标对应的GOOS和GOARCH后运行构建命令可。下面交叉编译的程序将输出它在编译时操作系统和CPU型:
<u><i>gopl.io/ch10/cross</i></u>
```Go
@@ -76,7 +76,7 @@ func main() {
}
```
下面以64位和32位境分别行程序:
下面以64位和32位境分别行程序:
```
$ go build gopl.io/ch10/cross
@@ -87,19 +87,19 @@ $ ./cross
darwin 386
```
有些包可能需要針對不同平台和理器型使用不同版本的代文件,以便於處理底的可移植性問題或提供一些特定代提供化。如果一文件名包含了一操作繫統或處理器型名字例如net_linux.go或asm_amd64.sGo言的建工具將隻在對應的平台編譯這些文件。有一特别的構建註釋註釋可以提供更多的構建過程控。例如,文件中可能包含下面的註釋
有些包可能需要针对不同平台和理器型使用不同版本的代文件,以便于处理底的可移植性问题或提供一些特定代提供化。如果一文件名包含了一操作系统或处理器型名字例如net_linux.go或asm_amd64.sGo言的建工具将只在对应的平台编译这些文件。有一特别的构建注释注释可以提供更多的构建过程控。例如,文件中可能包含下面的注释
```Go
// +build linux darwin
```
在包明和包註釋的前面,該構建註釋參數告訴`go build`隻在編譯程序對應的目操作繫統是Linux或Mac OS X時才編譯這個文件。下面的構建註釋則表示不編譯這個文件:
在包明和包注释的前面,该构建注释参数告诉`go build`只在编译程序对应的目操作系统是Linux或Mac OS X时才编译这个文件。下面的构建注释则表示不编译这个文件:
```Go
// +build ignore
```
更多細節,可以考go/build包的構建約束部分的文
更多细节,可以考go/build包的构建约束部分的文
```
$ go doc go/build