回到简体

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,16 +1,16 @@
## 2.6. 包和文件
Go言中的包和其他言的或模的概念似,目的都是了支持模化、封裝、單獨編譯和代重用。一包的源代保存在一或多以.go文件後綴名的源文件中,通常一包所在目録路徑的後綴是包的入路例如包gopl.io/ch1/helloworld對應的目録路徑是$GOPATH/src/gopl.io/ch1/helloworld。
Go言中的包和其他言的或模的概念似,目的都是了支持模化、封装、单独编译和代重用。一包的源代保存在一或多以.go文件后缀名的源文件中,通常一包所在目录路径的后缀是包的入路例如包gopl.io/ch1/helloworld对应的目录路径是$GOPATH/src/gopl.io/ch1/helloworld。
包都對應一個獨立的名字空。例如在image包中的Decode函和在unicode/utf16包中的 Decode函是不同的。要在外部引用該函數,必須顯式使用image.Decode或utf16.Decode形式訪問
包都对应一个独立的名字空。例如在image包中的Decode函和在unicode/utf16包中的 Decode函是不同的。要在外部引用该函数,必须显式使用image.Decode或utf16.Decode形式访问
可以讓我們通過控製哪些名字是外部可見的來隱藏內部實現信息。在Go言中,一個簡單的規則是:如果一名字是大字母開頭的,那麽該名字是出的(譯註:因爲漢字不分大小,因此漢字開頭的名字是沒有導出的)。
可以让我们通过控制哪些名字是外部可见的来隐藏内部实现信息。在Go言中,一个简单的规则是:如果一名字是大字母开头的,那么该名字是出的(译注:因为汉字不分大小,因此汉字开头的名字是没有导出的)。
了演示包基本的用法,先假設我們的溫度轉換軟件已很流行,我希望到Go言社也能使用這個包。我們該如何做呢?
了演示包基本的用法,先假设我们的温度转换软件已很流行,我希望到Go言社也能使用这个包。我们该如何做呢?
讓我們創建一個名爲gopl.io/ch2/tempconv的包是前面例子的一個改進版本。(我們約定我的例子都是以章節順序來編號的,這樣的路更容易閲讀)包代碼存儲在兩個源文件中,用演示如何在一源文件明然在其他的源文件訪問;雖然在現實中,這樣小的包一般需要一文件。
让我们创建一个名为gopl.io/ch2/tempconv的包是前面例子的一个改进版本。(我们约定我的例子都是以章节顺序来编号的,这样的路更容易阅读)包代码存储在两个源文件中,用演示如何在一源文件明然在其他的源文件访问;虽然在现实中,这样小的包一般需要一文件。
們把變量的明、對應的常量,有方法都放到tempconv.go源文件中
们把变量的明、对应的常量,有方法都放到tempconv.go源文件中
<u></i>gopl.io/ch2/tempconv</i></u>
```Go
@@ -32,7 +32,7 @@ func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }
func (f Fahrenheit) String() string { return fmt.Sprintf("%g°F", f) }
```
轉換函數則放在另一conv.go源文件中
转换函数则放在另一conv.go源文件中
```Go
package tempconv
@@ -44,23 +44,23 @@ func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }
func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }
```
源文件都是以包的聲明語句開始,用指名包的名字。包被入的候,包的成員將通過類似tempconv.CToF的形式訪問。而包别的名字,例如在一文件明的型和常量,在同一包的其他源文件也是可以直接訪問的,就好像所有代都在一文件一。要意的是tempconv.go源文件入了fmt包但是conv.go源文件併沒有,因爲這個源文件中的代碼併沒有用到fmt包。
源文件都是以包的声明语句开始,用指名包的名字。包被入的候,包的成员将通过类似tempconv.CToF的形式访问。而包别的名字,例如在一文件明的型和常量,在同一包的其他源文件也是可以直接访问的,就好像所有代都在一文件一。要意的是tempconv.go源文件入了fmt包但是conv.go源文件并没有,因为这个源文件中的代码并没有用到fmt包。
爲包級别的常量名都是以大字母開頭,它可以像tempconv.AbsoluteZeroC這樣被外部代碼訪問
为包级别的常量名都是以大字母开头,它可以像tempconv.AbsoluteZeroC这样被外部代码访问
```Go
fmt.Printf("Brrrr! %v\n", tempconv.AbsoluteZeroC) // "Brrrr! -273.15°C"
```
將攝氏溫度轉換爲華氏溫需要先用import語句導入gopl.io/ch2/tempconv包就可以使用下面的代碼進行轉換了:
将摄氏温度转换为华氏温需要先用import语句导入gopl.io/ch2/tempconv包就可以使用下面的代码进行转换了:
```Go
fmt.Println(tempconv.CToF(tempconv.BoilingC)) // "212°F"
```
在每源文件的包明前跟着的註釋是包註釋§10.7.4)。通常,包註釋的第一句應該先是包的功能概要明。一包通常有一源文件有包註釋(譯註:如果有多個包註釋,目前的文工具會根據源文件名的先後順序將它們鏈接爲一個包註釋)。如果包註釋很大,通常放到一個獨立的doc.go文件中。
在每源文件的包明前跟着的注释是包注释§10.7.4)。通常,包注释的第一句应该先是包的功能概要明。一包通常有一源文件有包注释(译注:如果有多个包注释,目前的文工具会根据源文件名的先后顺序将它们链接为一个包注释)。如果包注释很大,通常放到一个独立的doc.go文件中。
**練習 2.1** 向tempconv包添加型、常量和函數用來處理Kelvin絶對溫度的轉換Kelvin 絶對零度是273.15°CKelvin絶對溫度1K和氏度1°C的單位間隔是一的。
**练习 2.1** 向tempconv包添加型、常量和函数用来处理Kelvin绝对温度的转换Kelvin 绝对零度是273.15°CKelvin绝对温度1K和氏度1°C的单位间隔是一的。
{% include "./ch2-06-1.md" %}