当前位置:网站首页>Go-6-常用命令-go包管理问题-两个路径-GO111MODULE
Go-6-常用命令-go包管理问题-两个路径-GO111MODULE
2022-08-02 14:56:00 【hahyyy】
常用命令汇总
- go version:获取go版本
- go env:查看go环境变量
- go help:查看go帮助命令
- go get:获取远程包(需提前安装git或hg)
- 使用该命令前必须配置GOPATH,而且依据不同的源码网站,要安装不同的版本管理工具
- go get本质上可以理解为通过源码工具clone下代码后,执行了go install
- 添加 -u 参数可以自动更新包和依赖
- go build:编译并生成可执行程序
- go run:直接运行程序
- go fmt:格式化源码
- 使用go fmt命令,其实是调用了gofmt
- gofmt需要参数 -w ,否则格式化结果不会写入文件
- go install:编译包文件以及整个程序
- 和go build类似,不过它可以在编译后,把生成的可执行文件或者库安装到对应的目录下
- 可执行文件安装到:$GOPATH/bin/
- 可引用库安装到:$GOPATH/pkg/
- 注:没有开启go mod时,使用上述命令需要配置GOPATH,否则会报:no install location
- go test:go原生提供的单元测试命令
- go clean:移除当前源码包和关联源码包里编译生成的文件
- go tool:升级go版本时,修复旧版代码
- godoc -http:80:开启一个本地80端口的web文档
- gdb 可执行程序名:调试go编译出来的文件
go mod的常用命令
- go mod init:初始化当前文件夹,创建go.mod文件
- go mod tidy:检查,包整理(多的删去,少的拉取),使用之前自然是import了需要的库了
- go mod download:下载依赖到本地(默认为GOPATH/pkg/mod目录)
- go mod edit:编辑go.mod文件
- go mod graph:以文本模式打印模块需求图
- go mod vendor:生成vendor目录
- go mod verify:验证依赖是否正确
- go mod why:查找依赖
go包管理
代码如下:
package main
import (
"fmt"
"github.com/jinzhu/configor"
)
func main() {
fmt.Println("vim-go", configor.Config{})
}
# 配置Module包管理,记得配置goproxy
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
# 初始化项目:主要 解决包管理问题
go mod init xxx.go # 初始化,会生成go.mod文件
go mod tidy # 解决依赖问题,会生成go.sum文件
# 运行方法一:直接运行
go run xxx.go
# 运行方法二:编译成可执行文件
go build xxx.go # xxx文件移到任何目录都可以直接运行,不会再有依赖问题
./xxx # 后面不用再加.go
go的三种包管理
go path:
在1.5版本之前,所有的依赖包都是存放在GOPATH下,没有版本控制
这种方式的最大弊端就是无法实现包的多版本控制,比如项目A和项目B依赖与不同版本的package,如果package没有左到完全的向前兼容,往往会导致一些问题
go venfor:
1.5版本推出了vendor机制
所谓的vendor机制,就是每个项目的根目录下可以有一个vendor目录,里面存放了该项目的依赖的package。执行go build的时候会先去vendor目录查找依赖,如果没有再去GOPATH下找
go module:
1.11版本推出modules机制,简称mod。该模式通过mod.go文件管理依赖关系
以目前的情况来说,更推荐选择go module的包管理方式
两个路径
GOROOT:go的安装目录 -- 类似java的jdk,存放一些内置的开发包和工具
GOPATH:go指定的工作空间 -- 用于保存go项目的代码和第三方依赖包
GO111MODULE的可选值
GO111MODULE有三个可选值:on、off和auto
go 1.16之前默认auto,go 1.16之后默认on
GO111MODULE=off:无模块支持,go会从GOPATH和vendor文件夹寻找包
GO111MODULE=on:模块支持,go会忽略GOPATH和vendor文件夹,只根据go.mod下载依赖
GO111MODULE=auto:在$GOPATH/src外面且根目录有go.mod文件时,开启模块支持
边栏推荐
猜你喜欢
祝蔡徐坤生日快乐!
TCP(传输控制协议)
IPtables and binlog
MySQL 行级锁(行锁、临键锁、间隙锁)
2022 Low Voltage Electrician Exam Questions and Online Mock Exam
Win 10、Win 11 安装 MuJoCo 及 mujoco-py 教程
Linux系统中mysql数据库的基本管理
语音直播系统——做好敏感词汇屏蔽打造绿色社交环境
【Leetcode字符串--字符串变换/进制的转换】HJ1.字符串最后一个单词的长度 HJ2.计算某字符出现次数 HJ30.字符串合并处理
基于mobileNet实现狗的品种分类(迁移学习)
随机推荐
开篇-开启全新的.NET现代应用开发体验
告别手摇织布机的AI时代
IDO预售DAPP系统开发(NFT挖矿)
程序员开发效率神器汇总!
威纶通触摸屏如何隐藏系统设置箭头图标及通过参数进入系统设置?
Drag and Drop in H5
Qt | 关于如何使用事件过滤器 eventFilter
2022 Security Officer-A Certificate Exam Questions and Mock Exam
codeforces Linova and Kingdom
阿里巴巴《MySQL成长手册》精简版
剑指Offer 49.丑数 动态规划
HDU1561 树形背包dp+边界优化 0ms过题
PAT tree DP (memory search) class a, 1079, 1090, 1106
Why do I no longer recommend the enumeration strategy pattern?
MySQL----多表查询
已解决ModuleNotFoundError: No module named‘ pip‘(重新安装pip的两种方式)
mysql 索引使用与优化
统计二进制中1的个数,两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
Basic management of mysql database in Linux system
Vest bag access process record