速戰速決 go - go 面向對象: 包

速戰速決 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章