【原創】go語言學習(十一)package簡介
阿新 • • 發佈:2019-11-06
目錄
- Go原始碼組織方式
- main函式和main包
- 編譯命令
- 自定義包
- init函式以及執行行順序
- _識別符號
Go原始碼組織方式
1、 Go通過package的方式來組織原始碼
package 包名
注意:任何一個原始碼都屬於一個包
作用:程式碼複用和可讀性
2、可執行程式的包名必須為main,並且包含一個main函式
package main import ( "fmt" ) func main() { fmt.Println(“hello world”) }
3、package組織案例例
再src/calc的包編輯完成後再pkg中
main函式和main包
1、連結工程
package main -- | 靜態連結
|----------------------> 可執行檔案
pkg/windows_amd64/.../*.a ---|
自定義包
1、除了可執行程式之外,使用者可以寫自定義包,自定義包編譯成靜態庫
package calc // package calc2 不建議這麼寫 // 包組織方式,自定義包 // 使用go install生成靜態庫 // calc_test中呼叫靜態庫 var ( Sum int ) func Add(a int, b int) int { return a + b } // 小寫方法名為私有,不能呼叫 func sub(a int, b int) int { return a - b }
package main import ( "fmt" "github.com/gostudy/listen11/calc" // _ 沒有引用保留包 // _ "github.com/gostudy/listen11/calc" ) // 呼叫pkg\windows_and64\githbu.com\gostudy\listen11\calc.a // 執行全域性變數,再執行init初始化 var a int = 10 var b int = 10 // init 函式,再main函式之前執行 func init() { fmt.Println(a, b) fmt.Println("init func in main") } // init函式可以多個,可以有多檔案,多init,按編譯順序執行 // 1初始化sub 包 // 2初始化add import // 3初始化main func init() { fmt.Println("init2 func in main") } func main() { var sum = calc.Add(2, 3) fmt.Printf("sum=%d\n", sum) }
注意:go_path 要配置好路徑
編譯命令
1、go run運⾏行行go程式碼, 如果有多個⽂檔案,需要把所有⽂檔案都寫到go run後⾯面
2、go build 編譯go程式碼,如果是可執行程式,預設會在當前⽬目錄⽣生成可執行程式,可以使⽤用-o指定可執行程式生成的目錄。
3、go install編譯go程式碼,並且把可執行程式拷貝到GOPATH的bin目錄,自定義或第三方包會拷貝到GOPATH的pkg目錄
init函式以及執行行順序
1、一個包里可以有0個或多個init函式,在程式啟動時會被自動呼叫
package calc import ( "fmt" ) // 先執⾏行行全域性 // 變數量初始化 var a int=10 // 然後再執行 // init函式 func init() { } // 最後執行 // main函式 func Add(a, b int) int{ return a+b }
2、 如果一個包import另外一個包
_識別符號
1、_ 沒有引用保留包
package calc import ( “fmt" _ “sub” ) func Add(a, b int) int{ return a+b }