速戰速決 go https://github.com/webabcd/GoSample
作者 webabcd
速戰速決 go - go 面向對象: 包
示例如下:
oop/package1.go
// 設置當前文件的包名,只需要指定當前文件夾的名稱即可,不用寫全名
package oop
// go 可以導入內置包(GOROOT 路徑)和第三方包(GOPATH 路徑)和自定義包(你自己的路徑)
// go 的可見性控制:
// 1、如果定義的常量、變量、類型、接口、接口中的方法,結構體、結構體中的成員、函數等的名稱是大寫字母開頭,則表示能被其它包訪問或調用,非大寫字母開頭就只能在包內使用
// 2、同包名下互相可見所以不能重名
/*
// 單行導入
import "fmt"
// 然後就可以通過導入的包名使用這個包下的東西了
fmt.Println("xxx")
*/
/*
// 多行導入
import (
"fmt"
"math"
)
*/
/*
// 爲導入的包指定別名
import F "fmt"
// 然後就可以通過別名使用這個包下的東西了
F.Println("xxx")
*/
/*
// 以合併的方式導入包
import . "fmt"
// 然後就可以直接使用這個包下的東西了
Println("xxx")
*/
// 導入包時要寫全路徑
// 導入包時,會先調用包中的文件的 init 方法
// 如果 a 導入了 b,b 導入了 c,則先調用 c 中文件的 init 方法,再調用 b 中文件的 init 方法,最後調用 c 中文件的 init 方法
// 如果同包有多個文件都有 init 方法,則他們的調用順序不定
import (
// _ 的意思就是你無法使用這個包(但是會調用這個包中的文件的 init 方法)
_ "GoSample/oop/pkg1"
// 注:因爲當前包引用了 GoSample/oop/pkg1,而 GoSample/oop/pkg1 引用了 GoSample/oop/pkg1/pkg2,所以當前包如果被引用後則會打印
// pkg2 init
// pkg1 init
)
func Package1Sample() {
}
oop/pkg1/go.go
package pkg1
import (
// _ 的意思就是你無法使用這個包(但是會調用這個包中的文件的 init 方法)
_ "GoSample/oop/pkg1/pkg2"
"fmt"
)
func init() {
fmt.Println("pkg1 init")
}
oop/pkg1/pkg2/go.go
package pkg2
import "fmt"
func init() {
fmt.Println("pkg2 init")
}
速戰速決 go https://github.com/webabcd/GoSample
作者 webabcd