go modules 個(gè)人使用總結(jié)

go modules

[TOC]

go 1.13 的環(huán)境配置

刪除.zshrc 中的大部分配置,只配置goroot其余配置用下列命令:

go env -w GOSUMDB="sum.golang.google.cn" # 更換為國內(nèi)的校驗(yàn)源,默認(rèn)sum.golang.org
go env -w GOPROXY="https://goproxy.io,direct" # 解決代理
go env -w GO111MODULE="on"
go env -w GOPRIVATE=*.gitlab.com,*.gitee.com # 代理跳過私有庫設(shè)置

環(huán)境配置

  1. 正確配置 GOROOT

  2. export GOPROXY="https://goproxy.cn,direct" # 七牛提供的公共代理,解決golang/x/tools 下載失敗

初始化 同時(shí) 確定了項(xiàng)目的絕對目錄路徑

go mod init v5u.win/projectapi
生成 go.mod
導(dǎo)入包:import "v5u.win/projectapi/src/app/service"

添加依賴

go mod tidy

生成 go.sum 自動添加依賴關(guān)系到 go.mod

go run main.go

下載依賴包

go mod download github.com/pelletier/go-toml

Tips:

  1. 不能在 golib/src 下創(chuàng)建項(xiàng)目
  2. 在 Go1.11 版本下,GOPATH 目錄中的項(xiàng)目默認(rèn)是禁用 Go Module 的,需要手動開啟
  3. export GOPROXY="https://goproxy.cn,direct" // 微軟提供的公共代理,也可以以此技術(shù)建立自己的公共庫
  4. export export GO111MODULE=on // 必須使用module依賴,在src/ 目錄下可以使用module。 go1.13已經(jīng)全面支持

一條 go env-w GOPROXY=https://goproxy.cn,direct即可。之所以在后面拼接一個(gè) ,direct,是因?yàn)橥ㄟ^這樣做我們可以在一定程度上解決私有庫的問題(當(dāng)然, goproxy.cn 無法訪問你的私有庫)

常用命令

go mod tidy //拉取缺少的模塊,移除不用的模塊。
go mod download //下載依賴包
go mod graph //打印模塊依賴圖
go mod vendor //將依賴復(fù)制到 vendor 下
go mod verify //校驗(yàn)依賴
go mod why //解釋為什么需要依賴
go list -m -json all //依賴詳情

注:

module vgo 默認(rèn)使用本地緩存的代碼版本,如果想指定版本的話,最好顯示聲明一下,不要使用自動解析的方式。

file go.mod

module giligili

go 1.13

require (
    github.com/gin-gonic/gin v1.4.0
    github.com/go-redis/redis v6.15.5+incompatible
    github.com/jinzhu/gorm v1.9.10
)

引入本地依賴包

前面鋪墊了這么多,接下來回到我們的主題,我該怎樣使用我們自己開發(fā)的工具包呢? 假設(shè)我們有一個(gè)新的項(xiàng)目 testmod-demo,現(xiàn)在想要在新的項(xiàng)目中使用 testmod 中的工具包,那么首先我們需要使用 go mod 初始化該項(xiàng)目:

cd testmod-demo
go mod init gitee.com/rockyang/testmod-demo

初始化之后會在當(dāng)前項(xiàng)目根目錄生成一個(gè) go.mod,接下來我們有兩種方式去引入 testmod 包,一種是直接修改 go.mod 文件,在 require 配置中添加上

gitee.com/rockyang/testmod v0.0.0-20190610103414-4c55783279db

或者使用 go mod edit 命令修改依賴

go mod edit -require="gitee.com/rockyang/testmod@v0.0.0-20190610103414-4c55783279db"
go mod tidy # 整理依賴包

使用 replace 將遠(yuǎn)程包替換為本地包服務(wù)

這時(shí)如果你執(zhí)行 go build 的時(shí)候會報(bào)錯,提示找不到 gitee.com/rockyang/testmod,是因?yàn)槟銢]有把倉庫推送到遠(yuǎn)程,所以無法下載。 go module 提供了另外一個(gè)方案, 使用 replace, 編輯 go.mod 文件,在最后面添加: replace gitee.com/rockyang/testmod => /gopath/src/gitee.com/rockyang/testmod

module gitee.com/rockyang/testmod-demo

go 1.12

require (
    github.com/gin-gonic/gin v1.3.0
    gitee.com/rockyang/testmod@v0.0.0-20190610103414-4c55783279db
    golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53 // indirect
)

replace gitee.com/rockyang/testmod => /gopath/src/gitee.com/rockyang/testmod

這里的 /gopath/src/gitee.com/rockyang/testmod 是本地的包路徑

然后再執(zhí)行 go build 你會看到你想要的結(jié)果。

私有庫相關(guān)設(shè)置

首先私有服務(wù)器必須有一個(gè)域名,不能使用ip。

這里使用 gitee 和 GitHub 作為測試服務(wù)器

GOSUMDB=off #解決私有庫校驗(yàn)不過,放棄校驗(yàn),大心臟者適用
GOSUMDB=sum.golang.google.cn #或者 更換校驗(yàn)源
go env -w GOSUMDB="sum.golang.google.cn" # google 為我們提供了國內(nèi)的校驗(yàn)源

配置 .gitconfig 將 http 改為 ssh 獲取。

[http]
    extraheader = PRIVATE-TOKEN: token
[url "git@gitee.com:fan.jinlong/go_module_lib.git"]
    insteadOf = https://gitee.com/fan.jinlong/go_module_lib.git

坑4:拉取私有模塊

image

這里主要想涉及兩塊知識點(diǎn),如下:

- GOPROXY 是無權(quán)訪問到任何人的私有模塊的,所以你放心,安全性沒問題。
- GOPROXY 除了設(shè)置模塊代理的地址以外,還需要增加 “direct” 特殊標(biāo)識才可以成功拉取私有庫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容