同事的项目本地执行没有问题,线上跑go test的时候一直无法通过,build 失败。
最终定位原因:
- 环境需要安装gcc环境
- 打开golang的环境变量
CGO_ENABLED="1"
环境默认是打开了CGO的,但执行go test时会报gcc错误。为了不安装gcc环境,强制修改了这个变量(还尝试了半天修改的方法)
这是因为甚至是go test ./...
时,有些报会使用到 “C混合编译”,需要注意这俩个关键因素。
go import
Understanding Dependency Management in Go Understanding Vendoring:
In order to be able to fully understand how vendoring works we must understand the algorithm used by Go to resolve import paths, which is the following:
- Look for the import at the local vendor directory (if any)
- If we can’t find this package in the local vendor directory we go up to the parent folder and try to find it in the vendor directory there (if any)
- We repeat step 2 until we reach $GOPATH/src
- We look for the imported package at $GOROOT
- If we can’t find this package at GOPATH/src folder
go mod
Go mod 使用
告别GOPATH,快速使用 go mod(Golang包管理工具)
go.mod文件中定义了当前项目对应的module名称,如golang.gebitang.com/my/module
。
对于pkg/util/log
的包,当前项目中使用import时,可以使用下面的方式进行引入。go mod模块会自动进行转换
import (
"golang.gebitang.com/my/module/pkg/util/log"
)
go mod将依赖统一放到GOPATH下的pkg下的pkg下面,并且支持不同版本(使用@vMajor.minor.path)的格式管理
有疑问加站长微信联系(非本文作者)