<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
go語言的工作空間必須由 bin、pkg、src三個目錄組成,可以在GOPATH
環境變數中新增多個工作空間,但不能和GOROOT
相同。通常go get
使用第一個工作空間儲存下載的第三方庫
workspace | +--- bin // go install 安裝目錄。 | | | +--- learn | | +--- pkg // go build ⽣成靜態庫 (.a) 存放目錄。 | | | +--- darwin_amd64 | | | +--- mylib.a | | | +--- mylib | | | +--- sublib.a | +--- src // 專案原始碼目錄。 | +--- learn | | | +--- main.go | | +--- mylib | +--- mylib.go | +--- sublib | +--- sublib.g
::: tip 包命名慣例
關鍵字 Import ,進行導包。未使用的匯入包,會編譯錯誤。
import a import b,…多次匯入,以及import(a b c) 批次匯入,如果匯入的包不使用會報錯。
import "fmt" //或者 import( "fmt" "time" )
import( io "fmt" ) io.Println("hello world") //別名可以直接用,在包重名時很有用
import ( . "fmt" //但是為了別人好看,一般還是不用這種 ) func main(){ Println("hello") }
即匯入一個包並不使用它。如果不加_,就會出現編譯錯誤。 在這裡用下劃線 _ 重新命名匯入的包。只匯入,不使用。 但是這個包它進行了初始化,一般在init
函數呼叫,這樣做的好處是,有些包我們不顯示使用它,但是有可能用到它,或者由使用者選擇使用哪個。比如 對特定影象驅動包的初始化,在我們格式化轉換圖片用到。還有 database/sql
包,可以先都初始化,讓使用者選擇不同的資料庫驅動。
import _ "test" //非匯入模式:僅讓該包執行初始化函數
一般情況下是包的相對路徑。比如import "learn/test"
,標準庫中的包會在安裝 Go 的位置找到,即GOROOT
。 Go 開發者建立的包會在 GOPATH
環境變數指定的目錄裡查詢。GOPATH
指定的這些目錄就是開發者的個人工作空間。
目前的大勢所趨是,使用分散式版本控制系統(Distributed Version Control Systems, DVCS)
來分享程式碼,如 GitHub
、 Launchpad
還有 Bitbucket
。 Go 語言的工具鏈本身就支援從這些網站及 類似網站獲取原始碼。 Go 工具鏈會使用匯入路徑確定需要獲取的程式碼在網路的什麼地方。
比如:import "github.com/xxxx/xxx"
,用匯入路徑編譯程式時, go build 命令會使用 GOPATH
的設定,在磁碟上搜尋這個包。事實上, 這個匯入路徑代表一個URL,指向 GitHub
上的程式碼庫。如果路徑包含 URL,可以使用 Go 工具鏈從 DVCS
獲取包,並把包的原始碼儲存在GOPATH
指向的路徑裡與 URL 匹配的目錄裡。這個獲取過程 使用 go get 命令完成。
go get 將獲取任意指定的 URL 的包,或者一個已經匯入的包所依賴的其 他包。由於 go get的這種遞迴特性,這個命令會掃描某個包的原始碼樹,獲取能找到的所有依賴包。
每個包可以包含任意多個 init 函數,這些函數都會在程式執行開始的時候被呼叫。所有被編譯器發現的 init 函數都會安排在 main 函數之前執行。 init 函數用在設定包、初始化變數或者其他要在程式執行前優先完成的引導工作。舉例如下
package postgres import ( "database/sql" ) func init() { //初始化函數 //這裡省略。。 sql.Register("postgres", new(PostgresDriver)) }
要啟用go module
支援首先要設定環境變數GO111MODULE
,通過它可以開啟或關閉模組支援,它有三個可選值:off、on、auto,預設值是auto。 設定GO111MODULE=on
之後就可以使用go module
了,以後就沒有必要在GOPATH
中建立專案了,並且還能夠很好的管理專案依賴的第三方包資訊。 使用 go module
管理依賴後會在專案根目錄下生成兩個檔案go.mod
和go.sum
。
GO111MODULE=off
禁用模組支援,編譯時會從GOPATH
和vendor
資料夾中查詢包。GO111MODULE=on
啟用模組支援,編譯時會忽略GOPATH
和vendor
資料夾,只根據 go.mod
下載依賴。GO111MODULE=auto
,當專案在$GOPATH/src
外且專案根目錄有go.mod
檔案時,開啟模組支援。Go1.13之後GOPROXY
預設值為proxy.golang.org,在國內是無法存取的,所以十分建議大家設定GOPROXY
常用的go mod命令如下:
go mod命令 | 描述 |
---|---|
go mod download | 下載依賴的module到本地cache(預設為$GOPATH/pkg/mod目錄) |
go mod edit | 編輯go.mod檔案 |
go mod graph | 列印模組依賴圖 |
go mod init | 初始化當前資料夾, 建立go.mod檔案 |
go mod tidy | 增加缺少的module,刪除無用的module |
go mod vendor | 將依賴複製到vendor下 |
go mod verify | 校驗依賴 |
go mod why | 解釋為什麼需要依賴 |
go.mod
檔案記錄了專案所有的依賴資訊,其結構大致如下:
module github.com/ourlang/studygo/myblog go 1.13 require ( github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 github.com/gin-gonic/gin v1.4.0 github.com/go-sql-driver/mysql v1.4.1 github.com/jmoiron/sqlx v1.2.0 github.com/satori/go.uuid v1.2.0 google.golang.org/appengine v1.6.1 // indirect )
go mod
支援語意化版本號,比如go get foo@v1.2.3
,也可以跟git的分支或tag,比如go get foo@master
,當然也可以跟git提交雜湊,比如go get foo@e3702bed2
。關於依賴的版本支援以下幾種格式:
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2 v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e latest
在國記憶體取golang.org/x
的各個包都需要翻牆,你可以在go.mod
中使用replace
替換成github
上對應的庫。
replace ( golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0 )
::: tip 在專案中執行go get命令可以下載依賴包,並且還可以指定下載的版本。
go get -u
將會升級到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號, y是次要版本號)go get -u=patch
將會升級到最新的修訂版本go get package@version
將會升級到指定的版本號version
go mod download
命令。 :::我們在程式碼中刪除依賴程式碼後,相關的依賴庫並不會在go.mod
檔案中自動移除。這種情況下我們可以使用go mod tidy
命令更新go.mod
中的依賴關係
因為我們可以手動修改go.mod檔案,所以有些時候需要格式化該檔案。Go提供了一下命令:
go mod edit -fmt
go mod edit -require=golang.org/x/text
如果只是想修改go.mod
檔案中的內容,那麼可以執行go mod edit -droprequire=package path
,比如要在go.mod
中移除golang.org/x/text
包,可以使用如下命令
go mod edit -droprequire=golang.org/x/text
如果需要對一個已經存在的專案啟用go module
,可以按照以下步驟操作:
go mod init
,生成一個go.mod
檔案。go get
,查詢並記錄當前專案的依賴,同時生成一個go.sum
記錄每個依賴庫的版本和雜湊值對於一個新建立的專案,我們可以在專案資料夾下按照以下步驟操作:
go mod init 專案名
命令,在當前專案資料夾下建立一個go.mod
檔案。go.mod
中的require
依賴項或執行go get
自動發現、維護依賴。以上就是Go語言套件和包管理詳解的詳細內容,更多關於Go語言套件及管理的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45