第二篇:go包管理
第二篇:go包管理
目錄一、包管理
1 包
即模組,組織go原始碼,提供了更好的可重用性和可用性。
每個檔案中第一行是package packagename
,代表指定了該檔案屬於那個包。
2 自定義包
-
go語言的程式碼必須放在gopath的src路徑下;
-
包匯入是從gopath的src路徑下開始檢索(開始找)【並非是在該專案下查詢】;
-
除了main包以外,建議包名就叫資料夾名,一個資料夾下的包名必須一致【也可以包名叫mypackage,其中所有檔案中第一行是package test】;
-
同一個包下,變數,函式只能定義一次【在包中的變數宣告,不能使用
a:=10
,這種型別,必須使用全定義或者半定義】; -
同一個包下的變數和函式可以直接相互使用【可以把包想象為是一整個大的檔案】;
-
包內的函式或變數,想讓外部包使用,必須首字母大寫;
package myPackage // 包內的變數、函式想讓外部使用,必須首字母大寫 var Name = "yangyi" var Age = 18 // 匯入使用 package main import ( "day01/myPackage" // 自動進行包的匯入 "fmt" ) // 內建包 func main() { fmt.Println(myPackage.Name) } import test "day01/myPackage" == python中的 import ... as ...
Java中可以使用
public private
等關鍵字來對外界使用進行限制。【可以使用public private
將類封裝成工具類】 -
以後下的第三方包都是放在gopath的src路徑下【編譯的時候,也就是將第三方包的函式也編譯到可執行檔案中】
3 init函式(特殊函式)
可以在包內的檔案中書寫init
函式。
// mypackage包中 package mypackage import "fmt" // 特殊函式,初始化函式,在導包的時候就會執行,並且可以定義多個 // 用處: 初始化工作【每次匯入包,執行這個函式】 func init() { fmt.Println("我是init函式...") } func init1(){ fmt.Println("我是init函式...") }
main
包也是會執行init函式
,進行初始化。
4 包匯入的幾種方式
-
import "day02/mypackage"
-
import 名字 "day02/mypackage"
包重新命名使用方式:
名字.變數/函式
-
import _ "day02/mypackage"
包只匯入,不使用
5 go mod模式建立專案
go語言有go mod;python中有虛擬環境;Java中有maven;
go語言沒有一個統一包管理的地址,大家都放到github上。【由於之前下載的包,都會放到src路徑的github.com下,所以,無法實現一個多版本的控制】【哈哈】
1.11版本推出go modules機制,簡稱mod。
set GO111MODULE=on // windows 將mod開啟
set GO111MODULE=off // 將mod關閉
export GO111MODULE=on // linux
建立go mod的兩種方式:
// 第一種:
1 新建一個專案資料夾,如day01專案
2 進入資料夾,開啟cmd,輸入 go mod init day01,會生成 go.mod檔案(該專案名 該專案依賴的go的版本,第三方包版本)
// 下載beego
go get github.com/astaxie/beego
如果沒有go mod,之前會在src路徑的github.com路徑下安裝;有go mod之後,會在pkg的路徑下進行存放。【之後進行第三方包的尋找,不是基於src路徑尋找,而是基於go mod配置的路徑進行尋找】
PS:自己寫的包放在專案中,go sdk就是go的安裝路徑,如果有go mod,第三方包就是pkg路徑下的。
我們這裡需要配置代理,如果不進行配置的話。【速度慢到無法想象】
package main
import (
"github.com/astaxie/beego"
) // 內建包
func main() {
beego.Run() // 啟動beego即可
}
可以把go mod檔案直接拷貝給別人,別人直接使用go install就可以安裝第三方包。