目录
一 、VGO简介
二 、命令简介
三 、配置VGO
方式一:传统方式
方式二:GOLANG-IDE插件支持
step1:下载安装
step2:设置vgo
四 、使用vgo
step1:创建项目并创建gomod
step2:初始化gomod文件
step3:解析依赖
step4:如果有第三方库,无法下载可以使用go.mod中的replace来解释require指定,例如
step5:下载依赖
step6:生成使用vendor文件
命令 | 描述 | 功能 |
download | download modules to local cache |
下载依赖的module到本地cache(gopath\pkg\mod\cache) |
edit | edit go.mod from tools or scripts |
编辑go.mod文件 |
graph | print module requirement graph |
打印模块依赖图 |
init | initialize new module in current directory | 在当前文件夹下初始化一个module, 生成go.mod文件 |
tidy | add missing and remove unused modules | 增加丢失的module,去掉未用的module |
vendor | make vendored copy of dependencies | 将依赖复制到当前模块vendor下 |
verify | verify dependencies have expected content | 校验依赖 |
why | explain why packages or modules are needed | 解释为什么需要依赖 |
##设置命令开启的环境变量
go env -w GO111MODULE=on
##同样也需要设置代理
go env -w GOPROXY=https://goproxy.cn
ps:以上已经完成所有配置,玩耍go mod命令即可,但是golang ide对此配置不感冒,会显示包没有引到,命令行不影响使用
ide抽风
file->settings->plugins->搜索Support for Vgo->install安装->restart重启idea
or
http://plugins.jetbrains.com/plugin/10753-vgo-support/versions
file->settings->plugins->install plugins from disk选择下好的插件->restart重启idea
file->settings->Go->Go Module(vgo)
1、✔Enable Go Modules(vgo) intergration
2、Vgo location %GOROOT%/bin/go.exe
3、Proxy: https://goproxy.cn
%GOPATH%/src/gomod-demo ##在此目录下建立项目叫gomod-demo
%GOPATH%/src/gomod-demo/src/main.go ##在项目目录新建src文件夹并创建main.go
main.go ##以简单的使用gobin框架的http服务器为例
##########################内容如下########################
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World")
})
router.Run(":8000")
}
cd /d %GOPATH%/src/gomod-demo ##切换项目根目录
go mode init [zyj.com/hello/v1.0.0] ##可以与项目名称不一致,不填为项目名gomod-demo
go.mod 生成
##########################内容如下########################
module gomod-demo
go 1.13
ps:推荐init模块填写规范,方便别人引用 网址域/模块名/版本号
则 go.mod 引用为 require 网址域/模块名 版本号
go程序 引用为 import 网址域/模块名
go.mod语法
#####################################
module 模块名
go go版本
require 需要的模块版本定义
exclude 排除的模块版本定义
replace 替换的模块版本定义
cd /d %GOPATH%/src/gomod-demo
go mod tidy
go.mod文件刷新
##########################内容如下########################
module gomod-demo
go 1.13
require github.com/gin-gonic/gin v1.4.0
go.sum文件生成
##########################内容如下########################
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g=
...以下省略
ps:
vgo影响着go get 可以指定某个版本进行go.mod修改,当然也可以直接修改go.mod重新编译即可
//查询可用版本
go list -m -versions github.com/gin-gonic/gin
//返回可用版本
github.com/gin-gonic/gin v1.1.1 v1.1.2 v1.1.3 v1.1.4 v1.3.0 v1.4.0
//使用可用版本
go get github.com/gin-gonic/[email protected]
require zyj.com/hello v1.0.0
replace zyj.com/hello => F:\temp\gomod-test
ps: 1.引入的包必须也是gomod的(有.mod文件) 定义为module zyj.com/hello/v1.0.0
2.本地包使用replace进行代码映射 F:\temp\gomod-test为本地包地址
eq
被引用代码电脑任何位置
gomod-test
├─go.mod
└─src
├─ main.go
└─ hello
└─ hello.go
=============go.mod============
module zyj.com/hello/v1.0.0
go 1.13
===============================
=============main.go===========
package main
import "fmt"
func main() {
fmt.Println("hello")
}
===============================
=============hello.go==========
package hello
import "fmt"
func Hello() {
fmt.Println("hello")
}
===============================
引用代码%GOPATH%/src
gomod-demo
├─go.mod
├─go.sum
└─src
└─ main.go
=============go.mod============
module gomod-demo
go 1.13
require zyj.com/hello v1.0.0
replace zyj.com/hello => F:\temp\gomod-test
===============================
=============main.go===========
package main
import (
"zyj.com/hello/src/hello"
)
func main() {
hello.Hello()
}
===============================
cd /d %GOPATH%/src/gomod-demo
go mod download
ps:不带参数时,根据go.mod文件增量下载
带参数时,指定下载依赖。path是包的路径,version是包的版本。
cd /d %GOPATH%/src/gomod-demo
go mod vendor
生成vendor文件夹,并拷贝依赖到vendor中
E:.
├─src
│ └─main.go
├─go.sum
├─go.mod
└─vendor
├─github.com
│ ├─gin-contrib
│ │ └─sse
│ ├─gin-gonic
│ │ └─gin
│ │ ├─binding
│ │ ├─internal
│ │ │ └─json
│ │ └─render
│ ├─golang
│ │ └─protobuf
│ │ └─proto
│ ├─json-iterator
│ │ └─go
│ ├─mattn
│ │ └─go-isatty
│ ├─modern-go
│ │ ├─concurrent
│ │ └─reflect2
│ └─ugorji
│ └─go
│ └─codec
├─golang.org
│ └─x
│ └─sys
│ └─unix
├─gopkg.in
│ ├─go-playground
│ │ └─validator.v8
│ └─yaml.v2
└─zyj.com
└─hello
└─src
└─hello