如何理解Go語(yǔ)言的模塊化

本篇內(nèi)容介紹了“如何理解Go語(yǔ)言的模塊化”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、天津網(wǎng)絡(luò)推廣、微信小程序、天津網(wǎng)絡(luò)營(yíng)銷(xiāo)、天津企業(yè)策劃、天津品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供天津建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18980820575,官方網(wǎng)址:www.muchs.cn

環(huán)境變量

學(xué)習(xí) go 語(yǔ)言的第一步,當(dāng)然是安裝以及環(huán)境變量。由于我是 macos,直接運(yùn)行 brew install go  就能安裝成功,也可以在官網(wǎng)(https://golang.google.cn/)下載對(duì)應(yīng)的二進(jìn)制包。

安裝成功后,需要配置下面幾個(gè)環(huán)境變量:

  • GOROOT:go 語(yǔ)言的安裝路徑;

  • GOBIN:go 語(yǔ)言的可執(zhí)行文件路徑,一般為 "$GOROOT/bin";

  • GOPATH:工作目錄,可設(shè)置多個(gè),每個(gè)項(xiàng)目都可以設(shè)置一個(gè)單獨(dú)的GOPATH;

GOPATH

在 GoLand(go 語(yǔ)言最強(qiáng)IDE) 中,我們可以在 Preferences 中設(shè)置多個(gè) GOPATH,而且將 GOPATH  分為全局和局部的。

如何理解Go語(yǔ)言的模塊化

GOPATH 最早出現(xiàn)的意義是用來(lái)進(jìn)行模塊管理,每個(gè) GOPATH 中會(huì)有三個(gè)目錄:

  • src:用來(lái)存放源代碼;

  • pkg:用來(lái)存放編譯后的 .a(archive) 靜態(tài)庫(kù)文件;

  • bin:用來(lái)存放編譯后可直接運(yùn)行的二進(jìn)制文件;

如何理解Go語(yǔ)言的模塊化

一般設(shè)置為工作目錄的 src 文件夾需要手動(dòng)創(chuàng)建,其他兩個(gè)目錄都是編譯后自動(dòng)生成的。

接下來(lái),我們新建了一個(gè)目錄 ~/Code/goland/go-story,并將該目錄設(shè)置為工作目錄。

export GOPATH="~/Code/goland/go-story"

然后在當(dāng)前目錄新建一個(gè) src 文件夾,并新建一個(gè) hello 目錄,在 hello 目錄新建 main.go 文件。

如何理解Go語(yǔ)言的模塊化

在 hello/main.go 文件中,寫(xiě)入如下代碼:

package main  import (  "flag"  "fmt" )  var name string  func init() {  flag.StringVar(&name, "name", "everyone", "The greeting object.") }  func main() {  flag.Parse() // 解析命令行參數(shù)  fmt.Printf("\nHello %s\n", name) }

flag 庫(kù)是 go 內(nèi)置的模塊,類(lèi)似于 node 的 commander 庫(kù),運(yùn)行后結(jié)果如下所示:

如何理解Go語(yǔ)言的模塊化

下面我們引入一個(gè)能夠讓命令行輸出色彩更加豐富的庫(kù):colourize,類(lèi)似于 node 中的 chalk。通過(guò)下面這個(gè)命令來(lái)安裝依賴(lài):

go get github.com/TreyBastian/colourize

運(yùn)行之后,我們可以看到在工作區(qū)自動(dòng)創(chuàng)建了一個(gè) pkg 目錄,目錄下新生成的是 colourize 庫(kù)文件,同時(shí) src 目錄也新建了一個(gè) github.com 目錄,用來(lái)放 colourize 的源碼。

如何理解Go語(yǔ)言的模塊化

go get 命令可以簡(jiǎn)單理解為 npm install。接下來(lái)就能在 hello/main.go 中引入依賴(lài)。

package main  import (  "flag"  "fmt"   "github.com/TreyBastian/colourize" )  var name string  func init() {  flag.StringVar(&name, "name", "everyone", "The greeting object.") }  func hello(name string) {  fmt.Printf(colourize.Colourize("\nHello %s\n", colourize.Blue), name) }  func main() {  flag.Parse()  hello(name) }

運(yùn)行 hello/main.go 可以看到命令行輸出了藍(lán)色的文字。

如何理解Go語(yǔ)言的模塊化

默認(rèn)情況下,go 依賴(lài)的加載機(jī)制為:

  • $GOROOT 下的 src 目錄

  • $GOPATH 下的 src 目錄

Go Vendor

前面這種方式,有個(gè)很麻煩的問(wèn)題,就是沒(méi)有辦法進(jìn)行很好的版本管理,而且多個(gè)依賴(lài)分散在 $GOPATH/src  目錄下,可能會(huì)出現(xiàn)很多很麻煩的問(wèn)題。

例如,我現(xiàn)在在 GOPATH 下有兩個(gè)項(xiàng)目:go-blog、go-stroy,這兩個(gè)項(xiàng)目分別有不同的依賴(lài),分散在 github.com  目錄,這個(gè)時(shí)候到底要不要將整個(gè) github.com 目錄添加到版本庫(kù)呢?

如何理解Go語(yǔ)言的模塊化

go 在 1.5 版本的時(shí)候,引入了 vendor 機(jī)制,在每個(gè)項(xiàng)目目錄下可以通過(guò) vendor 目錄存放依賴(lài),這類(lèi)似于 node 中的 node_modules 目錄。

如何理解Go語(yǔ)言的模塊化

使用 go vendor 需要先安裝 govendor 模塊。

go get govendor

然后在項(xiàng)目目錄運(yùn)行如下命令。

cd ~/Code/gland/go-story/src/hello govendor init govendor add github.com/TreyBastian/colourize

可以看到,hello 項(xiàng)目下新生成了一個(gè) vendor 目錄,而且 colourize 也被拷貝到了該目錄下。

如何理解Go語(yǔ)言的模塊化

而且 govendor 會(huì)新建一個(gè) vendor.json 文件,用來(lái)進(jìn)行依賴(lài)項(xiàng)的管理。

如何理解Go語(yǔ)言的模塊化

有了 go vendor 之后,依賴(lài)項(xiàng)的加載順序如下:

  • 項(xiàng)目目錄下的 vendor 目錄

  • 項(xiàng)目目錄上一級(jí)的 vendor 目錄

  • 不斷向上冒泡 ……(PS. 類(lèi)似于 node_modules)

  • $GOPATH 下的 vendor 目錄

  • $GOROOT 下的 src 目錄

  • $GOPATH 下的 src 目錄

配置開(kāi)關(guān)

有一點(diǎn)需要注意,在 go 1.5 版本下,go vendor 并不是默認(rèn)開(kāi)啟的,需要手動(dòng)配置環(huán)境變量:

export GO15VENDOREXPERIMENT=1

在 go 1.6 版本中,go vendor 已經(jīng)改為默認(rèn)開(kāi)啟。

Go Modules

雖然 1.5 版本推出了 go vendor,但是沒(méi)有解決根本問(wèn)題,只是依賴(lài)的查找上支持到了 vendor 目錄,vendor  目錄還是需要一些第三方的庫(kù)(govendor、godep、glide)進(jìn)行管理,而且對(duì)于 GOPATH 環(huán)境變量依然有所依賴(lài)。

官方為了解決這些問(wèn)題,終于在 1.11 版本中,實(shí)驗(yàn)性的內(nèi)置了其模塊管理的能力(1.12 版本正式開(kāi)啟):go mod。

使用 go mod 的時(shí)候,我們無(wú)需 GOPATH,所以我們需要把之前配置的 GOPATH 清理掉,調(diào)整下目錄結(jié)構(gòu),將  go-story/hello/main.go 直接移動(dòng)到 go-story/main.go,然后將 src、pkg 目錄刪除。

# 初始化 go modules go mod init [pkg-name]

如何理解Go語(yǔ)言的模塊化

此時(shí),會(huì)在目錄下生成一個(gè) go.mod 文件。

如何理解Go語(yǔ)言的模塊化

查看其內(nèi)容,發(fā)現(xiàn)里面會(huì)聲明 go 的版本號(hào),以及當(dāng)前模塊的名稱(chēng)。

如何理解Go語(yǔ)言的模塊化

然后我們安裝依賴(lài)(不管是何種依賴(lài)管理的方式,安裝方法依舊不變):

go get github.com/TreyBastian/colourize

如何理解Go語(yǔ)言的模塊化

go.mod 中,會(huì)寫(xiě)入添加的依賴(lài),以及版本號(hào),同時(shí),該模塊會(huì)被安裝到 GOPATH 中。由于我們之前將 GOPATH 移除,這里會(huì)安裝到 GOPATH  的默認(rèn)值中(~/go/)。

如何理解Go語(yǔ)言的模塊化

“如何理解Go語(yǔ)言的模塊化”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

本文題目:如何理解Go語(yǔ)言的模塊化
鏈接地址:http://www.muchs.cn/article36/ijsesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、搜索引擎優(yōu)化外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)