日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【Go学习】一文彻底搞懂go mod使用

發(fā)布時(shí)間:2024/1/3 47 生活家
生活随笔 收集整理的這篇文章主要介紹了 【Go学习】一文彻底搞懂go mod使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jquery中文網(wǎng)為您提供一文徹底搞懂go mod使用等資源,歡迎您收藏本站,我們將為您提供最新的一文徹底搞懂go mod使用資源

目錄

一、如何使用go mod

二、golang開(kāi)啟mod后import報(bào)紅解決

三、go mod 怎么導(dǎo)入本地其它項(xiàng)目的包?

四、完整代碼


一、如何使用go mod

下面的函數(shù)中使用了iris,所以我們需要先使用go mod下載相關(guān)依賴,直接使用go get命令太慢了,還可能被墻~~

【此時(shí)項(xiàng)目可以放在任意位置,不必非要放在GOPATH目錄下】

test.go

package main

import (
	iris "github.com/kataras/iris/v12"
)

func main() {
	app := iris.New()
	app.Get("/", func(ctx iris.Context) {
		ctx.HTML("<h1>Hello World!</h1>")
	})

	app.Run(iris.Addr(":8080"))
}

1、打開(kāi)CMD命令提示框,設(shè)置臨時(shí)環(huán)境變量

set GO111MODULE=on
set GOPROXY=https://goproxy.io

注意https://goproxy.io 也可替換成阿里云的https://mirrors.aliyun.com/goproxy

2、再次執(zhí)行g(shù)o get github.com/kataras/iris 也可以加 -v -u ,如下

go get -u github.com/kataras/iris/v12@latest

這時(shí)候就把所有的依賴都下載下來(lái)了。

值得注意的是,這些包并沒(méi)有下載到 GOPATH/src 目錄下,而是在 GOPATH/pkg/mod 目錄中。

3、使用初始化生成go.mod文件

go mod init 初始化生成go.mod文件

go mod tidy 加載module->go.mod

4、添加依賴運(yùn)行

執(zhí)行go run test.go運(yùn)行代碼會(huì)發(fā)現(xiàn) go mod 會(huì)自動(dòng)查找依賴自動(dòng)下載

5、再次運(yùn)行主函數(shù)

go run test.go,訪問(wèn)http://localhost:8080/:

go mod更加詳細(xì)的使用可參考我的另一篇博客:

go下載安裝使用web框架iris go mod使用:https://blog.csdn.net/qq_38151401/article/details/105739028

二、golang開(kāi)啟mod后import報(bào)紅解決

在golang中,開(kāi)啟mod模式后,import包變紅,但是程序可以正常運(yùn)行

如下所示:

猜測(cè)是索引路徑出了問(wèn)題,當(dāng)前項(xiàng)目的依賴路徑如下,可以看到只有sdk和GOPATH,沒(méi)有g(shù)o mod模塊

新建go項(xiàng)目,然后老老實(shí)實(shí)的go mod init [項(xiàng)目名],然后go build拉包,一切正常,這時(shí),在setting里再啟用go mod勾選上

然后,奇跡出現(xiàn)了,我們的依賴中,多了一個(gè)go mod路徑,這時(shí)原來(lái)報(bào)紅的import路徑消失了!!!

三、go mod 怎么導(dǎo)入本地其它項(xiàng)目的包?

通過(guò)上圖中的引入依賴可以清晰地看到,我們啟用go mod后,很明顯的由GOPATH路徑變成了go mod路徑

也就是說(shuō),之前的基于GOPATH的路徑訪問(wèn)方式不管用了,并且go mod不支持相對(duì)路徑的引入方式,這個(gè)時(shí)候如果要引入其他模塊,怎么做呢?

GOPATH和GOROOT加詳細(xì)的理解可參考我的另一篇博客:

徹底搞懂golang的GOROOT和GOPATH:https://blog.csdn.net/qq_38151401/article/details/105729884

項(xiàng)目結(jié)構(gòu)如下所示,需要在modelDemo模塊中引入model模塊

hellodemo.go是應(yīng)用的入口,main 所在位置,而model可以理解為你寫的一個(gè)公共的庫(kù),其中提供了一個(gè)函數(shù) Hello()。現(xiàn)在,要在 hellodemo.go中調(diào)用 model中的 Hello() 函數(shù)。傳統(tǒng)的方式是基于GOPATH或者相對(duì)路徑的方式,但go mod均不支持,那如何解決呢?

1、model模塊中的 go.mod內(nèi)容如下:

(在model目錄下運(yùn)行g(shù)o mod init生成go.mod文件)

2、model模塊中的mymodel.go內(nèi)容如下:

3、modelDemo模塊中的 go.mod內(nèi)容如下:

(在modeldemo目錄下運(yùn)行g(shù)o mod init生成go.mod文件)

go.mod 提供了module,requirereplaceexclude四個(gè)命令

module語(yǔ)句指定包的名字(路徑)
require語(yǔ)句指定的依賴項(xiàng)模塊
replace語(yǔ)句可以替換依賴項(xiàng)模塊
exclude語(yǔ)句可以忽略依賴項(xiàng)模塊

現(xiàn)需要引入model模塊

此處的 replac稍微介紹下,之所以要是 github.com/model 的格式,是因?yàn)樵?go1.13 中, go module 名稱規(guī)范要求路徑的第一部分必須滿足域名規(guī)范,否則可能匯報(bào)類似malformed module path "model": missing dot in first path element這樣的錯(cuò)誤。當(dāng)然,在 go1.12 不會(huì)有報(bào)這個(gè)錯(cuò)誤。建議的話,如果是公司內(nèi)部使用,可以替換成公司內(nèi)部域名。

引入上面的replace內(nèi)容侯,再次運(yùn)行hellodemo.go,就會(huì)自動(dòng)生成上面的require內(nèi)容

replace 的第二個(gè)參數(shù)指定了不從遠(yuǎn)程獲取,而是本地某個(gè)路徑下的模塊替換 github.com/model。

4、hellodemo.go內(nèi)容如下:

此時(shí),執(zhí)行 go run hellodemo.go 是可以成功運(yùn)行的。

四、完整代碼

1、model -> mymodel.go

package model

func Hello() string {
	return "Hello"
}

2、model -> go.mod

module Demo/model

go 1.14

3、helloDemo -> hellodemo.go

package main

import (
	"fmt"
	"github.com/model"
)

func main()  {
	fmt.Println("Hello")
	fmt.Println(model.Hello())
}

4、helloDemo -> go.mod

module Demo/modelDemo

go 1.14

require github.com/model v0.0.0-00010101000000-000000000000 // indirect

replace github.com/model => ../model

參考文章:

golang開(kāi)啟mod后import報(bào)紅解決:https://zhuanlan.zhihu.com/p/93508676
Go Module 引入本地自定義包:http://www.r9it.com/20190611/go-mod-use-dev-package.html
go mod 怎么導(dǎo)入本地其它項(xiàng)目的包?:https://segmentfault.com/q/1010000020696591

作者:gtea
博客地址:https://www.cnblogs.com/gtea

總結(jié)

以上是生活随笔為你收集整理的【Go学习】一文彻底搞懂go mod使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。