ch2-06 review

This commit is contained in:
chai2010
2015-12-26 20:53:13 +08:00
parent e15e88dad7
commit 801a62f7a0
3 changed files with 42 additions and 36 deletions

View File

@@ -1,10 +1,10 @@
### 2.6.1. 導入包
在Go程序中, 每個包都是有一個全局唯一的導入路徑. 聲明中類似 "gopl.io/ch2/tempconv" 的字符串對應導入路徑. 語言的規范併沒有定義這些字符串的具體含義或包來自哪里, 它們是由工具來解釋. 當使用 go 工具箱時(第十章), 一個導入路徑代表一個目録中的一個或多個Go源文件.
在Go語言程序中每個包都是有一個全局唯一的導入路徑。導入語句中類似"gopl.io/ch2/tempconv"的字符串對應包的導入路徑。Go語言的規范併沒有定義這些字符串的具體含義或包來自哪里它們是由構建工具來解釋的。當使用Go語言自帶的go工具箱時第十章一個導入路徑代表一個目録中的一個或多個Go源文件
除了導入路徑, 每個包還有一個包名, 包名一般是短小的(也不要求是唯一的), 包名在包的聲明處指定. 按照慣例, 一個包的名字和包的導入路徑的最後一個字段相同, 例如 gopl.io/ch2/tempconv 包的名字是 tempconv.
除了包的導入路徑每個包還有一個包名包名一般是短小的名字(併不要求包名是唯一的包名在包的聲明處指定按照慣例一個包的名字和包的導入路徑的最後一個字段相同例如gopl.io/ch2/tempconv包的名字一般是tempconv
要使用 gopl.io/ch2/tempconv 包, 需要先導入:
要使用gopl.io/ch2/tempconv包,需要先導入
```Go
gopl.io/ch2/cf
@@ -34,9 +34,9 @@ func main() {
}
```
導入聲明將導入的包綁定到一個短小的名字, 然後通過該名字就可以引用包中導出的全部內容. 上面的導入聲明將允許我們以 tempconv.CToF 的方式來訪問 gopl.io/ch2/tempconv 包中的內容. 默認情況下, 導入的包綁定到 tempconv 名字, 但是我們也可以綁定到另一個名稱, 以避免名字衝突(§10.3).
導入語句將導入的包綁定到一個短小的名字然後通過該短小的名字就可以引用包中導出的全部內容上面的導入聲明將允許我們以tempconv.CToF的形式來訪問gopl.io/ch2/tempconv包中的內容。在默認情況下導入的包綁定到tempconv名字(譯註:這包聲明語句指定的名字),但是我們也可以綁定到另一個名稱以避免名字衝突§10.3)。
cf 程序將命令行輸入的一個溫度在 CelsiusFahrenheit 之間轉換:
cf程序將命令行輸入的一個溫度在CelsiusFahrenheit溫度單位之間轉換
```
$ go build gopl.io/ch2/cf
@@ -48,12 +48,11 @@ $ ./cf -40
-40°F = -40°C, -40°C = -40°F
```
如果導入一個包, 但是沒有使用該包將被當作一個錯誤. 這種強製檢測可以有效減少不必要的依賴, 雖然在調試期間會讓人討厭, 因爲刪除一個類似 log.Print("got here!") 的打印可能導致需要同時刪除 log 包導入聲明, 否則, 編譯器將會發出一個錯誤. 在這種情況下, 我們需要將不必要的導入刪除或註釋掉.
如果導入一個包但是沒有使用該包將被當作一個編譯錯誤處理。這種強製規則可以有效減少不必要的依賴雖然在調試期間可能會讓人討厭因爲刪除一個類似log.Print("got here!")的打印語句可能導致需要同時刪除log包導入聲明,否則,編譯器將會發出一個錯誤在這種情況下我們需要將不必要的導入刪除或註釋掉
不過有更好的解決方案, 我們可以使用 golang.org/x/tools/cmd/goimports 工具, 它可以根據需要自動添加或刪除導入的包; 許多編輯器都可以集成 goimports 工具, 然後在保存文件的時候自動允許它. 類似的還有 gofmt 工具, 可以用來格式化Go源文件.
不過有更好的解決方案我們可以使用golang.org/x/tools/cmd/goimports導入工具,它可以根據需要自動添加或刪除導入的包許多編輯器都可以集成goimports工具然後在保存文件的時候自動運行。類似的還有gofmt工具可以用來格式化Go源文件
**練習 2.2:** 寫一個通用的單位轉換程序, 用類似 cf 程序的方式從命令行讀取參數, 如果缺省的話則是從標準輸入讀取參數, 然後做類似 CelsiusFahrenheit 的轉換,
長度單位對應英尺和米, 重量單位對應磅和公斤 等等.
**練習 2.2** 寫一個通用的單位轉換程序用類似cf程序的方式從命令行讀取參數如果缺省的話則是從標準輸入讀取參數然後做類似CelsiusFahrenheit的單位轉換,長度單位可以對應英尺和米,重量單位可以對應磅和公斤等。