math/rand包有一個Intn函數,可以生成一個隨機數,所以我們需要導入math/rand。然后調用rand.Intn生成隨機數。
等一下!Intn來自math/rand包,那為什么我們調用包的時候使用的是rand.Intn,而不是math/rand.Intn呢?
一個是包的導入路徑,另一個是包的名稱。
當我們說math/rand時,我們指的是包的導入路徑,而不是它的名稱。導入路徑只是一個獨特的字符串,用於標識符以及在導入語句中使用的包。一旦導入了包,就可以通過其包名來引用它。
導入路徑與包名相同的包,這里有幾個例子:
但導入路徑和包名稱不必相同。許多Go包屬於類似的類別,它們被分組在類似的導入路徑前綴下,例如:“archive/”或“math/”。(可以把它們想象成類似於硬盤上的目錄的路徑。)
Go語言不要求包名與其導入路徑有任何關系。但按照慣例,導入路徑的最后一段也作為包名。因此,如果導入路徑為“archive”,則包名為archive,如果導入路徑為“archive/zip”,則包名為zip。