go mod依赖管理以及编译执行 | 豆包MarsCode AI刷题

71 阅读2分钟

配置go环境

 go env -w GO111MODULE=on //开启go moudle
 go env -w GOPROXY=https://goproxy.cn //设置国内代理

go env查看配置信息

go mod依赖管理

go mod文件

//项目名
module go_workspace
//go sdk版本
go 1.19

//当前module(项目)依赖的包
require (
   dependency latest //第一个字段是依赖的包,第二个是包的版本
)
//排除第三方包
exclude (
   dependency latest //第一个字段是不依赖的包,第二个是包的版本
)
//修改依赖包的路径或版本
//场景:依赖包发生迁移
//原始包无法访问
//使用本地包替换原始包
replace (
   source latest => target latest
)
//撤回,自己的项目作为别人的第三方包有bug
//场景:甲乙两个项目用我的项目(版本1.0.0)为第三方包,乙出现问题,我会推出1.0.1版本供乙使用,
//但是乙有可能会继续访问1.0.0版本,我可以用retract撤回1.0.0
retract ()

go mod命令

//将模块下载到本地缓存,需要指定模块路径及版本号
go mod download
//例如:
go mod download github.com/gin-gonic/gin@v1.9.0


//初始化一个新的项目(模块)到当前目录
go mod init
//例如:
go mod init gomodcase


//依赖对齐,添加缺少的依赖,删除未使用的依赖
go mod tidy//常用


//通过工具或脚本编辑go.mod
go mod edit


//根据go.mod中的依赖项制作vendor副本
//有了vendor副本,项目将不再依赖本地缓存
go mod vendor


//验证依赖是否正确
go mod verify


//返回对指定模块的依赖关系最短路径,解释为什么依赖指定包
go mod why

go install/get/clean

//go install 安装可执行插件(安装目录:GOPATH)
//例如:
go install github.com/google/gops@latest


//go get 获取模块信息并更新go.mod文件(go get -u更新模块依赖,并更新go.mod)
//若本地缓存模块没有该模块,则下载模块,若有直接引用
//例如:
go get github.com/gin-gonic/gin@1.9.0


//go clean清理临时目录中的文件
//例如:
go clean -modcache

执行流程分析

源文件.go ——go build编译——>可执行文件 .exe文件 ——运行——> 结果

源文件.go ——go run 编译运行一步走 ——> 结果

注意事项

  • 编译后的文件名可以重命名
  • go编译器是一行一行进行编译的,不能把多条语句写在同一行

两者区别

go build:在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,那么可以将所产生的可执行文件拷贝到没有go开发环境的机器上,仍然可以运行

go run:编译并执行,如果要在另外机器上运行,也需要go开发环境,否则无法执行