mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-12-27 07:16:22 +00:00
9666211cd7
Fixes #198
42 lines
2.0 KiB
Markdown
42 lines
2.0 KiB
Markdown
## 10.4. 導入聲明
|
||
|
||
可以在一個Go語言源文件包聲明語句之後,其它非導入聲明語句之前,包含零到多個導入包聲明語句。每個導入聲明可以單獨指定一個導入路徑,也可以通過圓括號同時導入多個導入路徑。下面兩個導入形式是等價的,但是第二種形式更爲常見。
|
||
|
||
```Go
|
||
import "fmt"
|
||
import "os"
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
)
|
||
```
|
||
|
||
導入的包之間可以通過添加空行來分組;通常將來自不同組織的包獨自分組。包的導入順序無關緊要,但是在每個分組中一般會根據字符串順序排列。(gofmt和goimports工具都可以將不同分組導入的包獨立排序。)
|
||
|
||
```Go
|
||
import (
|
||
"fmt"
|
||
"html/template"
|
||
"os"
|
||
|
||
"golang.org/x/net/html"
|
||
"golang.org/x/net/ipv4"
|
||
)
|
||
```
|
||
|
||
如果我們想同時導入兩個有着名字相同的包,例如math/rand包和crypto/rand包,那麽導入聲明必須至少爲一個同名包指定一個新的包名以避免衝突。這叫做導入包的重命名。
|
||
|
||
```Go
|
||
import (
|
||
"crypto/rand"
|
||
mrand "math/rand" // alternative name mrand avoids conflict
|
||
)
|
||
```
|
||
|
||
導入包的重命名隻影響當前的源文件。其它的源文件如果導入了相同的包,可以用導入包原本默認的名字或重命名爲另一個完全不同的名字。
|
||
|
||
導入包重命名是一個有用的特性,它不僅僅隻是爲了解決名字衝突。如果導入的一個包名很笨重,特别是在一些自動生成的代碼中,這時候用一個簡短名稱會更方便。選擇用簡短名稱重命名導入包時候最好統一,以避免包名混亂。選擇另一個包名稱還可以幫助避免和本地普通變量名産生衝突。例如,如果文件中已經有了一個名爲path的變量,那麽我們可以將"path"標準包重命名爲pathpkg。
|
||
|
||
每個導入聲明語句都明確指定了當前包和被導入包之間的依賴關繫。如果遇到包循環導入的情況,Go語言的構建工具將報告錯誤。
|