go包管理的具體實現(xiàn)
一、包管理
1 包
即模塊,組織go源代碼,提供了更好的可重用性和可用性。
每個文件中第一行是package packagename,代表指定了該文件屬于那個包。
go語言中,同一層級的文件屬于一個包,比如第一層級
package main,如果新定義一個demo文件夾,在其中的文件中書寫package main(雖然都叫main包,但是不是同一個包),在第一層級的package main中引用demo文件下的main包,是屬于main.函數(shù)名的形式。【原理是這樣,但是這樣寫會報錯??】
2 自定義包
- go語言的代碼必須放在gopath的src路徑下;
- 包導(dǎo)入是從gopath的src路徑下開始檢索(開始找)【并非是在該項目下查找】;
- 除了main包以外,建議包名就叫文件夾名,一個文件夾下的包名必須一致【也可以包名叫mypackage,其中所有文件中第一行是package test】;
- 同一個包下,變量,函數(shù)只能定義一次【在包中的變量聲明,全局變量不能使用
a:=10,這種類型,必須使用全定義或者半定義】; - 同一個包下的變量和函數(shù)可以直接相互使用【可以把包想象為是一整個大的文件】;
- 包內(nèi)的函數(shù)或變量,想讓外部包使用,必須首字母大寫;
package myPackage // 包內(nèi)的變量、函數(shù)想讓外部使用,必須首字母大寫
var Name = "yangyi"
var Age = 18
// 導(dǎo)入使用
package main
import (
"day01/myPackage" // 自動進(jìn)行包的導(dǎo)入
"fmt"
) // 內(nèi)置包
func main() {
fmt.Println(myPackage.Name)
}
import test "day01/myPackage" == python中的 import ... as ...
Java中可以使用public private等關(guān)鍵字來對外界使用進(jìn)行限制?!究梢允褂?code>public static將類封裝成工具類】
以后下的第三方包都是放在gopath的src路徑下【編譯的時候,也就是將第三方包的函數(shù)也編譯到可執(zhí)行文件中】
3 init函數(shù)(特殊函數(shù))
可以在包內(nèi)的文件中書寫init函數(shù)。
// mypackage包中
package mypackage
import "fmt"
// 特殊函數(shù),初始化函數(shù),在導(dǎo)包的時候就會執(zhí)行,并且可以定義多個
// 用處: 初始化工作【每次導(dǎo)入包,執(zhí)行這個函數(shù)】
func init() {
fmt.Println("我是init函數(shù)...")
}
func init1(){
fmt.Println("我是init函數(shù)...")
}
main 包也是會執(zhí)行init函數(shù),進(jìn)行初始化。
4 包導(dǎo)入的幾種方式
import "day02/mypackage"import 名字 "day02/mypackage"包重命名- 使用方式:
名字.變量/函數(shù)
- 使用方式:
import _ "day02/mypackage"包只導(dǎo)入,不使用
5 go mod模式創(chuàng)建項目
go語言有g(shù)o mod;python中有虛擬環(huán)境;Java中有maven;
go語言沒有一個統(tǒng)一包管理的地址,大家都放到github上?!居捎谥跋螺d的包,都會放到src路徑的github.com下,所以,無法實現(xiàn)一個多版本的控制】【哈哈】
1.11版本推出go modules機(jī)制,簡稱mod。
set GO111MODULE=on // windows 將mod開啟 set GO111MODULE=off // 將mod關(guān)閉 export GO111MODULE=on // linux
創(chuàng)建go mod的兩種方式:
// 第一種: 1 新建一個項目文件夾,如day01項目 2 進(jìn)入文件夾,打開cmd,輸入 go mod init day01,會生成 go.mod文件(該項目名 該項目依賴的go的版本,第三方包版本)

// 下載beego go get github.com/astaxie/beego

如果沒有g(shù)o mod,之前會在src路徑的github.com路徑下安裝;有g(shù)o mod之后,會在pkg的路徑下進(jìn)行存放?!局筮M(jìn)行第三方包的尋找,不是基于src路徑尋找,而是基于go mod配置的路徑進(jìn)行尋找】

PS:自己寫的包放在項目中,go sdk就是go的安裝路徑,如果有g(shù)o mod,第三方包就是pkg路徑下的。
我們這里需要配置代理,如果不進(jìn)行配置的話?!舅俣嚷綗o法想象】

package main
import (
"github.com/astaxie/beego"
) // 內(nèi)置包
func main() {
beego.Run() // 啟動beego即可
}
可以把go mod文件直接拷貝給別人,別人直接使用go mod download就可以安裝第三方包。
到此這篇關(guān)于go包管理的具體實現(xiàn)的文章就介紹到這了,更多相關(guān)go包管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)詳解
最近項目中需要用到鑒權(quán)機(jī)制,golang中jwt可以用,這篇文章主要給大家介紹了關(guān)于Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)的相關(guān)資料,需要的朋友可以參考下2022-09-09

