go module構(gòu)建項(xiàng)目的實(shí)現(xiàn)
在go 1.11版本中引入了Go Module內(nèi)置的包管理模塊,是GOPATH
的替代品,集成了版本控制和軟件包分發(fā)支持的功能。即go使用modules管理依賴,項(xiàng)目依賴構(gòu)建時(shí)不需要再依賴GOPATH環(huán)境變量。 要使用go module首先要激活modules .升級(jí)go到1.11版本 .這里給出官方文檔: https://github.com/golang/go/wiki/Modules
module介紹
go module是go新的依賴包管理系統(tǒng),go module 是go語(yǔ)言從1.11版本之后官方推出的版本管理工具,基于vgo演變而來(lái),是一個(gè)新型的包管理工具,在go1.11和go1.12該功能還在試驗(yàn)階段,從go 1.13開(kāi)始,go module 成為了go語(yǔ)言默認(rèn)的依賴管理工具,從go1.14開(kāi)始已經(jīng)用于生產(chǎn)環(huán)境,并且鼓勵(lì)所有用戶從其他依賴包管理系統(tǒng)遷移到go module
激活go module
設(shè)置環(huán)境變量GO111MODULE=on或者auto,mac下查看:
zhiyu@C02G64E0MD6R ~ % go env GO111MODULE="off"
需要將GO111MODULE
設(shè)置為auto/on
export GO111MODULE="on"
創(chuàng)建go module項(xiàng)目
打開(kāi)golang 創(chuàng)建新的工程,選擇go mod,這里創(chuàng)建的
如果需要配置依賴包鏡像,可以在 Environment 輸入框中點(diǎn)擊右側(cè)圖標(biāo),在彈出窗口新增 GOPROXY 環(huán)境變量進(jìn)行設(shè)置
在 Value 下拉列表中選擇 goproxy.io 這個(gè)鏡像即可,這是 Go 官方提供的全球代理。除此之外,你也可以通過(guò)終端命令行設(shè)置這個(gè)代理:
go env -w GOPROXY=https://goproxy.io,direct
點(diǎn)擊 OK 保存環(huán)境變量配置,在 GoLand 新建項(xiàng)目窗口點(diǎn)擊右下角 Create 創(chuàng)建這個(gè)新項(xiàng)目,此時(shí)calc
工程目錄下新增go.mod
文件,之后可以通過(guò)go mod來(lái)管理改項(xiàng)目的所有包依賴,目前這個(gè)文件包含的項(xiàng)目模塊如下所示:
且go.mod
的內(nèi)容如上圖所示
工程代碼
主要是實(shí)現(xiàn)計(jì)算器的功能,入口程序子然是main.go
,該文件最終會(huì)被編譯為計(jì)算器程序的可執(zhí)行文件
算法庫(kù)位simplemath
,一個(gè)函數(shù)功能對(duì)應(yīng)一個(gè)Go文件,如add.go
實(shí)現(xiàn)加法運(yùn)算,sqrt.go
實(shí)現(xiàn)平方根運(yùn)算
接著在calc根目錄下新增一個(gè)main.go
文件,代碼如下所示:
package main import ( "calc/simplemath" "fmt" "os" "strconv" ) var Usage = func() { fmt.Println("usage: calc command [arguments] ...") fmt.Println("\nThe commands are:\n\tadd\t計(jì)算兩個(gè)數(shù)值相加\n\tsqrt\t計(jì)算一個(gè)非負(fù)數(shù)的平方根") } func main() { //用于獲取命令參數(shù),注意程序本身第是第一個(gè)參數(shù) //比如 calc add 1 2 這條指令,第一個(gè)參數(shù)是calc args := os.Args if args == nil || len(args) < 3 { Usage() return } // 第二個(gè)參數(shù)表示計(jì)算方式 switch args[1] { case "add": if len(args) != 4 { fmt.Println("Usage: calc add <intergerl><integerl>") return } v1, err1 := strconv.Atoi(args[2]) v2, err2 := strconv.Atoi(args[3]) // 獲取參數(shù)錯(cuò)誤則退出 if err1 != nil || err2 != nil { fmt.Println("Usage: calc add <integerl1><integerl2>") return } // 從simplemath包中引入add方法 ret := simplemath.Add(v1,v2) fmt.Println("Result: ", ret) case "sqrt": if len(args) != 3 { fmt.Println("Usage: calc sqrt <integer>") return } v, err := strconv.Atoi(args[2]) if err != nil { fmt.Println("Usage: calc sqrt <interger>") return } ret := simplemath.Sqrt(v) fmt.Println("Result: ",ret) default: Usage() } }
注意:Go 是強(qiáng)類型語(yǔ)言,底層會(huì)自動(dòng)根據(jù)賦值判斷對(duì)應(yīng)變量的類型,如果你試圖聲明一個(gè)沒(méi)有初始化值的變量,就會(huì)報(bào)錯(cuò)
接著實(shí)現(xiàn)算法庫(kù),在命令行中執(zhí)行
mkdir simplemath
并手動(dòng)創(chuàng)建兩個(gè)文件分別是add.go
和sqrt.go
,工程目錄如下,兩個(gè)文件代碼分別如下所示
package simplemath func Add(a int, b int) int { return a+b }
package simplemath import "math" func Sqrt(i int) int { v := math.Sqrt(float64(i)) return int(v) }
go 工程構(gòu)建
計(jì)算器項(xiàng)目的代碼結(jié)構(gòu),在calc目前下并執(zhí)行go build
構(gòu)建該項(xiàng)目,默認(rèn)會(huì)在根目錄下生成與項(xiàng)目名稱同名的可執(zhí)行文件,如下所示
然后calc黑色圖標(biāo)這個(gè)文件就是可執(zhí)行文件,然后在命令行進(jìn)行測(cè)試
執(zhí)行go build
這就是為什么說(shuō) Go 命令行工具是非常強(qiáng)大的,我們不需要像 C 語(yǔ)言那樣編寫 makefile,因?yàn)檫@個(gè)工具會(huì)替我們分析,知道目標(biāo)代碼的編譯結(jié)果應(yīng)該是一個(gè)包還是一個(gè)可執(zhí)行文件,并分析 import 語(yǔ)句以了解包的依賴關(guān)系,從而在編譯 main.go 之前先把依賴的 simplemath 編譯打包好。Go 命令行程序制定的目錄結(jié)構(gòu)規(guī)則讓代碼管理變得非常簡(jiǎn)單.
到此這篇關(guān)于go module構(gòu)建項(xiàng)目的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go module構(gòu)建項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Goland使用Go Modules創(chuàng)建/管理項(xiàng)目的操作
- Linux中Go環(huán)境配置和GoModule常用操作
- Go?modules?replace解決Go依賴引用問(wèn)題
- go modules中replace使用方法
- GoLang中Module的基本使用方法
- 重學(xué)Go語(yǔ)言之如何使用Modules
- 詳解golang中?work與?module?的區(qū)別與聯(lián)系
- 淺析Go項(xiàng)目中的依賴包管理與Go?Module常規(guī)操作
- Go Module常用命令及如何使用Go Module
- Go Module依賴管理的實(shí)現(xiàn)
相關(guān)文章
詳解如何使用unsafe標(biāo)準(zhǔn)庫(kù)突破Golang中的類型限制
在使用c語(yǔ)言編程時(shí),常常因?yàn)轭愋偷膯?wèn)題大傷腦筋,而,golang提供了一些方式用于喜歡hack的用戶,下面我們就來(lái)講講如何使用unsafe標(biāo)準(zhǔn)庫(kù)突破Golang中的類型限制吧2024-03-03golang interface指針實(shí)現(xiàn)示例
本文主要介紹了golang interface指針實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Go語(yǔ)言實(shí)現(xiàn)字符串搜索算法Boyer-Moore
Boyer-Moore?算法是一種非常高效的字符串搜索算法,被廣泛的應(yīng)用于多種字符串搜索場(chǎng)景,下面我們就來(lái)學(xué)習(xí)一下如何利用Go語(yǔ)言實(shí)現(xiàn)這一字符串搜索算法吧2023-11-11詳解如何使用Golang操作MongoDB數(shù)據(jù)庫(kù)
在現(xiàn)代開(kāi)發(fā)中,數(shù)據(jù)存儲(chǔ)是一個(gè)至關(guān)重要的環(huán)節(jié),MongoDB作為一種NoSQL數(shù)據(jù)庫(kù),提供了強(qiáng)大的功能和靈活的數(shù)據(jù)模型,與Golang的高性能和并發(fā)性能非常契合,本文將探討Golang與MongoDB的完美組合,介紹如何使用Golang操作MongoDB數(shù)據(jù)庫(kù),需要的朋友可以參考下2023-11-11golang中defer執(zhí)行時(shí)機(jī)的案例分析
這篇文章主要來(lái)通過(guò)一些案例和大家一起探討一下golang中defer的執(zhí)行時(shí)機(jī),文中的示例代碼講解詳細(xì),對(duì)我們深入了解golang有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下2023-11-11Kotlin編程基礎(chǔ)語(yǔ)法編碼規(guī)范
這篇文章主要為大家介紹了Kotlin編程條件控制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08