目錄
- 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
}
