gomod交叉编译cannot find module for path…

新建项目准备使用gomod管理依赖,而且项目没放在gopath的时候发现个问题,go build -o SI-Kline-Minute cmd/main.go能通过,GOOS=linux GOARCH=amd64 go build -o SI-Kline-Minute cmd/main.go进行交叉编译报找不到module错误


环境

项目结构

├── Makefile
├── README.md
├── SI-Kline-Minute
├── cmd
│   └── main.go
├── common
│   ├── db
│   │   ├── mongo
│   │   │   └── mongo.go
│   │   └── redis
│   ├── log
│   │   └── logger.go
│   └── utils
│       └── utils.go
├── config
│   └── config.go
├── config.toml
├── go.mod
├── go.sum
├── logs
├── models
│   ├── internal.go
│   ├── kline.go
│   └── stock.go
└── vendor
    ...
    └── modules.txt

env

GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/itstudying/Library/Caches/go-build"
GOENV="/Users/itstudying/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=" -mod=vendor"
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/itstudying/code/go"
GOPRIVATE=""
GOPROXY="https://goproxy.io"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/itstudying/code/hsl/SI-Kline-Minute/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/gt/jqhlsj9126z_qlrnfbkvhshm0000gn/T/go-build003969582=/tmp/go-build -gno-record-gcc-switches -fno-common"

version

go version
go version go1.13 darwin/amd64

问题

  1. 执行go build 进行打包能成功

    go build cmd/main.go
    
  2. 交叉编译打包失败

    GOOS=linux GOARCH=amd64 go build cmd/main.go                  
    build command-line-arguments: cannot find module for path SI-Kline-Minute/common/utils
    
    

查问题期间尝试了重命名包,修改gomod相关配置,把go从1.12升级至1.13依然没解决,甚至怀疑是不是大小写的问题。全部无果后细心观察utils包有啥特殊的地方,因为新建项目,代码量很少,从项目结构能看出utilslog, db是处在同级中,但是logdb却很正常,他们之间唯一区别是log包和db包需要在main中做些初始化的操作,所以会在main中就调用这两个包的方法,而utils包不需要,仅仅只有这个区别,然后抱着死马当成活马医的心理去尝试下,在main文件里加上初始化utils包的代码_ "SI-Kline-Minute/common/utils",然后。。。。。。。。竟然编译通过了

反复尝试,加上初始化代码能通过,去掉初始化代码编译报错找不到module

加上初始化代码这样子能解决问题,而且也没觉得会有什么不妥,。。。。