当前位置:网站首页>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文件时,开启模块支持
边栏推荐
猜你喜欢
随机推荐
软件代码签名证书怎么申请
程序员开发效率神器汇总!
PAT Class A 1078 Hash
phpstudy实现命令行操作
codeforces k-Tree (dp仍然不会耶)
暴力破解美团最新JVM面试题:无限执行
太香了!阿里Redis速成笔记,从头到尾全是精华!
系统存储的基本管理--挂载,分区,用户配额
MySQL 高级(进阶) SQL 语句 (一)
vite.config.ts introduces the `path` module Note!
mysql 递归函数with recursive的用法
继续来学习有关淘宝的API接口的使用——获得店铺的所有商品 API
并发模型和I/O模型介绍
剑指Offer 49.丑数 动态规划
开篇-开启全新的.NET现代应用开发体验
马甲包接入过程记录
SQL实现将多行记录合并成一行
Typora永久使用,彻底解决This beta version of Typora is expired.
Why do I no longer recommend the enumeration strategy pattern?
遍历堆 PAT甲级 1155 堆路径