包是結構化代碼的一種方式:每個程序都由包(通常簡稱為 pkg)的概念組成,可以使用自身的包或者從其它包中導入內容。
如同其它一些編程語言中的類庫或命名空間的概念,每個 Go 文件都屬于且僅屬于一個包。一個包可以由許多以 .go
為擴展名的源文件組成,因此文件名和包名一般來說都是不相同的。
你必須在源文件中非注釋的第一行指明這個文件屬于哪個包,如:package main
。package main
表示一個可獨立執(zhí)行的程序,每個 Go 應用程序都包含一個名為 main
的包。
如果需要多個包,它們可以被分別導入:
import "fmt" import "os"
或:
import “fmt”; import “os”
但是還有更短且更優(yōu)雅的方法(被稱為因式分解關鍵字,該方法同樣適用于 const、var 和 type 的聲明或定義):
import ( "fmt" "os" )
可見性規(guī)則
當標識符(包括常量、變量、類型、函數(shù)名、結構字段等等)以一個大寫字母開頭,如:Group1,那么使用這種形式的標識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導入這個包),這被稱為導出(像面向對象語言中的 public);標識符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內部是可見并且可用的(像面向對象語言中的 private )。
你可以通過使用包的別名來解決包名之間的名稱沖突,或者說根據(jù)你的個人喜好對包名進行重新設置,如:
import fm "fmt"
。下面的代碼展示了如何使用包的別名:Example 4.2 alias.go
package main import fm "fmt" // alias3 func main() { fm.Println("hello, world") }
函數(shù)里的代碼(函數(shù)體)使用大括號
{ }
括起來。左大括號
{
必須與方法的聲明放在同一行,這是編譯器的強制規(guī)定,否則你在使用 gofmt 時就會出現(xiàn)build-error: syntax error: unexpected semicolon or newline before {
這樣的錯誤提示。
一個函數(shù)可以擁有多返回值,返回類型之間需要使用逗號分割,并使用小括號
( )
將它們括起來,如:func FunctionName (a typea, b typeb) (t1 type1, t2 type2)