### 2.6.1. 導入包

在Go語言程序中，每個包都是有一個全局唯一的導入路徑。導入語句中類似"gopl.io/ch2/tempconv"的字符串對應包的導入路徑。Go語言的規范併沒有定義這些字符串的具體含義或包來自哪里，它們是由構建工具來解釋的。當使用Go語言自帶的go工具箱時（第十章），一個導入路徑代表一個目録中的一個或多個Go源文件。

除了包的導入路徑，每個包還有一個包名，包名一般是短小的名字（併不要求包名是唯一的），包名在包的聲明處指定。按照慣例，一個包的名字和包的導入路徑的最後一個字段相同，例如gopl.io/ch2/tempconv包的名字一般是tempconv。

要使用gopl.io/ch2/tempconv包，需要先導入：

```Go
gopl.io/ch2/cf 
// Cf converts its numeric argument to Celsius and Fahrenheit. 
package main 

import ( 
	"fmt" 
	"os" 
	"strconv" 

	"gopl.io/ch2/tempconv" 
) 

func main() { 
	for _, arg := range os.Args[1:] { 
		t, err := strconv.ParseFloat(arg, 64) 
		if err != nil { 
			fmt.Fprintf(os.Stderr, "cf: %v\n", err) 
			os.Exit(1) 
		} 
		f := tempconv.Fahrenheit(t) 
		c := tempconv.Celsius(t) 
		fmt.Printf("%s = %s, %s = %s\n", 
			f, tempconv.FToC(f), c, tempconv.CToF(c)) 
	} 
} 
```

導入語句將導入的包綁定到一個短小的名字，然後通過該短小的名字就可以引用包中導出的全部內容。上面的導入聲明將允許我們以tempconv.CToF的形式來訪問gopl.io/ch2/tempconv包中的內容。在默認情況下，導入的包綁定到tempconv名字（譯註：這包聲明語句指定的名字），但是我們也可以綁定到另一個名稱，以避免名字衝突（§10.4）。

cf程序將命令行輸入的一個溫度在Celsius和Fahrenheit溫度單位之間轉換：

```
$ go build gopl.io/ch2/cf 
$ ./cf 32 
32°F = 0°C, 32°C = 89.6°F 
$ ./cf 212 
212°F = 100°C, 212°C = 413.6°F 
$ ./cf -40 
-40°F = -40°C, -40°C = -40°F 
```

如果導入了一個包，但是又沒有使用該包將被當作一個編譯錯誤處理。這種強製規則可以有效減少不必要的依賴，雖然在調試期間可能會讓人討厭，因爲刪除一個類似log.Print("got here!")的打印語句可能導致需要同時刪除log包導入聲明，否則，編譯器將會發出一個錯誤。在這種情況下，我們需要將不必要的導入刪除或註釋掉。

不過有更好的解決方案，我們可以使用golang.org/x/tools/cmd/goimports導入工具，它可以根據需要自動添加或刪除導入的包；許多編輯器都可以集成goimports工具，然後在保存文件的時候自動運行。類似的還有gofmt工具，可以用來格式化Go源文件。

**練習 2.2：** 寫一個通用的單位轉換程序，用類似cf程序的方式從命令行讀取參數，如果缺省的話則是從標準輸入讀取參數，然後做類似Celsius和Fahrenheit的單位轉換，長度單位可以對應英尺和米，重量單位可以對應磅和公斤等。



