go包管理的具體實(shí)現(xiàn)
一、包管理
1 包
即模塊,組織go源代碼,提供了更好的可重用性和可用性。
每個(gè)文件中第一行是package packagename
,代表指定了該文件屬于那個(gè)包。
go語言中,同一層級(jí)的文件屬于一個(gè)包,比如第一層級(jí)
package main
,如果新定義一個(gè)demo文件夾,在其中的文件中書寫package main
(雖然都叫main包,但是不是同一個(gè)包),在第一層級(jí)的package main
中引用demo文件下的main包,是屬于main.函數(shù)名
的形式?!驹硎沁@樣,但是這樣寫會(huì)報(bào)錯(cuò)??】
2 自定義包
- go語言的代碼必須放在gopath的src路徑下;
- 包導(dǎo)入是從gopath的src路徑下開始檢索(開始找)【并非是在該項(xiàng)目下查找】;
- 除了main包以外,建議包名就叫文件夾名,一個(gè)文件夾下的包名必須一致【也可以包名叫mypackage,其中所有文件中第一行是package test】;
- 同一個(gè)包下,變量,函數(shù)只能定義一次【在包中的變量聲明,全局變量不能使用
a:=10
,這種類型,必須使用全定義或者半定義】; - 同一個(gè)包下的變量和函數(shù)可以直接相互使用【可以把包想象為是一整個(gè)大的文件】;
- 包內(nèi)的函數(shù)或變量,想讓外部包使用,必須首字母大寫;
package myPackage // 包內(nèi)的變量、函數(shù)想讓外部使用,必須首字母大寫 var Name = "yangyi" var Age = 18 // 導(dǎo)入使用 package main import ( "day01/myPackage" // 自動(dòng)進(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)鍵字來對(duì)外界使用進(jìn)行限制?!究梢允褂?code>public static將類封裝成工具類】
以后下的第三方包都是放在gopath的src路徑下【編譯的時(shí)候,也就是將第三方包的函數(shù)也編譯到可執(zhí)行文件中】
3 init函數(shù)(特殊函數(shù))
可以在包內(nèi)的文件中書寫init
函數(shù)。
// mypackage包中 package mypackage import "fmt" // 特殊函數(shù),初始化函數(shù),在導(dǎo)包的時(shí)候就會(huì)執(zhí)行,并且可以定義多個(gè) // 用處: 初始化工作【每次導(dǎo)入包,執(zhí)行這個(gè)函數(shù)】 func init() { fmt.Println("我是init函數(shù)...") } func init1(){ fmt.Println("我是init函數(shù)...") }
main
包也是會(huì)執(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)建項(xiàng)目
go語言有g(shù)o mod;python中有虛擬環(huán)境;Java中有maven;
go語言沒有一個(gè)統(tǒng)一包管理的地址,大家都放到github上?!居捎谥跋螺d的包,都會(huì)放到src路徑的github.com下,所以,無法實(shí)現(xiàn)一個(gè)多版本的控制】【哈哈】
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 新建一個(gè)項(xiàng)目文件夾,如day01項(xiàng)目 2 進(jìn)入文件夾,打開cmd,輸入 go mod init day01,會(huì)生成 go.mod文件(該項(xiàng)目名 該項(xiàng)目依賴的go的版本,第三方包版本)
// 下載beego go get github.com/astaxie/beego
如果沒有g(shù)o mod,之前會(huì)在src路徑的github.com路徑下安裝;有g(shù)o mod之后,會(huì)在pkg的路徑下進(jìn)行存放?!局筮M(jìn)行第三方包的尋找,不是基于src路徑尋找,而是基于go mod配置的路徑進(jìn)行尋找】
PS:自己寫的包放在項(xiàng)目中,go sdk就是go的安裝路徑,如果有g(shù)o mod,第三方包就是pkg路徑下的。
我們這里需要配置代理,如果不進(jìn)行配置的話?!舅俣嚷綗o法想象】
package main import ( "github.com/astaxie/beego" ) // 內(nèi)置包 func main() { beego.Run() // 啟動(dòng)beego即可 }
可以把go mod文件直接拷貝給別人,別人直接使用go mod download就可以安裝第三方包。
到此這篇關(guān)于go包管理的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go包管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言單線程運(yùn)行也會(huì)有的并發(fā)問題解析
這篇文章主要為大家介紹了Go語言單線程運(yùn)行的并發(fā)問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12goroutine?泄漏和避免泄漏實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了goroutine?泄漏和避免泄漏實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)詳解
最近項(xiàng)目中需要用到鑒權(quán)機(jī)制,golang中jwt可以用,這篇文章主要給大家介紹了關(guān)于Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)的相關(guān)資料,需要的朋友可以參考下2022-09-09源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄
這篇文章主要為大家介紹了源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06