直接使用
go build main.go
打包,输出的是适用于windows的运行包”main.exe”
如果想在linux上运行,则需要调整以下参数:
第一步:进入代码路径
第二步:设置参数
go env -w CGO_ENABLED=0go env -w GOOS=darwin3go env -w GOARCH=amd64go build main.gogo env -w CGO_ENABLED=0go env -w GOOS=linuxgo env -w GOARCH=amd64go build main.go
第三步:打包
go build main.go
在所在目录即可出现”main”执行包,拷贝至linux中,并设置该文件的权限为“chmod 777 main ”
注:在输出的包中可能安装文件比较大,像压缩一下可以使用
go build -ldflags "-s -w" main.go
参数说明:
-s:去掉符号表(panic时候的stack trace没有任何文件名/行号信息);
-w:去掉调试信息(无法使用gdb调试);
注意:-s和-w也可以分开使用,一般来说如果不打算用gdb调试.
问题
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
解决
go env -w GO111MODULE=ongo mod init
问题:
新创建的golang项目,使用 go mod init 命令时出现
cannot determine module path for source directory xxxxxxx (outside GOPATH, module path must be specified)
解决方案:
这是因为go mod init 初始化项目时,需要定义一个 module ,我们打开一个 go.mod 文件,就会发现第一行就有
module ProjectName
因此,在执行 go mod init 时需要定义 module,如:
go mod init ProjectName
知识储备
//初始化模块:Go mod init <项目模块名称>//依赖关系处理,根据go.mod文件Go mod tidy//将依赖包复制到项目的vendor目录Go mod vendor//显示依赖关系Go list -m all//显示详细依赖关系Go list -m -json all//下载依赖Go mod download [path@version]

go env 检查设置是否生效
解释GOARCH与GOOS的意思
GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm)
各操作系统的打包方法
windows打包项目
set GOARCH=”…”(amd,arm)
set GOOS=”…”(windows,linux)
go build…生成一个没有后缀名的二进制文件
linux打包
export GOARCH=”…”
export GOOS=”…”
以linux系统为例

在Windows上的cmd命令中执行:
运行环境为arm机器系统为linux:
E:\ideaproject\goproject\src\hell>set GOARCH=arm64E:\ideaproject\goproject\src\hell>set GOOS=linuxE:\ideaproject\goproject\src\hell>go build agent.go
运行在环境为其他机器系统为linux:
E:\ideaproject\goproject\src\hell>set GOARCH=amd64E:\ideaproject\goproject\src\hell>set GOOS=linuxE:\ideaproject\goproject\src\hell>go build agent.go
如果执行报如下错:
E:\ideaproject\goproject\src\hell>go build agentServer.goagentServer.go:5:2: no required module provides package github.com/fasthttp/websocket: go.mod file not found in current directory or any parent directory; see 'go help modules'agentServer.go:6:2: no required module provides package github.com/valyala/fasthttp: go.mod file not found in current directory or any parent directory; see 'go help modules'agentServer.go:7:2: no required module provides package github.com/yeqown/fasthttp-reverse-proxy: go.mod file not found in current directory or any parent directory; see 'go help modules'
则执行命令:
E:\ideaproject\goproject\src\hell>go mod init
再次执行报如下错:
E:\ideaproject\goproject\src\hell>go build agent.goagent.go:5:2: no required module provides package github.com/fasthttp/websocket; to add it:go get github.com/fasthttp/websocketagent.go:6:2: no required module provides package github.com/valyala/fasthttp; to add it:go get github.com/valyala/fasthttpagent.go:7:2: no required module provides package github.com/yeqown/fasthttp-reverse-proxy; to add it:go get github.com/yeqown/fasthttp-reverse-proxy
则执行如下命令:
E:\ideaproject\goproject\src\hell>go get github.com/fasthttp/websocketgo get: module github.com/fasthttp/websocket: Get "https://proxy.golang.org/github.com/fasthttp/websocket/@v/list": dial tcp 172.217.27.145:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
如果报以上错则执行以下命令:
E:\ideaproject\goproject\src\hell>go env -w GOPROXY=https://goproxy.cn,direct
再次执行下载包命令:
E:\ideaproject\goproject\src\hell>go get github.com/fasthttp/websocketgo: downloading github.com/fasthttp/websocket v1.4.3go: downloading github.com/savsgio/gotils v0.0.0-20200608150037-a5f6f5aef16cgo: downloading github.com/valyala/fasthttp v1.14.0go: downloading github.com/klauspost/compress v1.10.4go: downloading github.com/andybalholm/brotli v1.0.0go: downloading github.com/valyala/bytebufferpool v1.0.0go get: added github.com/fasthttp/websocket v1.4.3E:\ideaproject\goproject\src\hell>go get github.com/yeqown/fasthttp-reverse-proxygo: downloading github.com/yeqown/fasthttp-reverse-proxy v0.0.0-20200930023507-ed73ac32bc64go: downloading github.com/yeqown/log v1.0.3go: downloading github.com/pkg/errors v0.9.1go get: added github.com/yeqown/fasthttp-reverse-proxy v0.0.0-20200930023507-ed73ac32bc64
出现以上提示则包下载成功,重新生成linux上可执行文件:
go env -w CGO_ENABLED=0go env -w GOOS=darwin3go env -w GOARCH=amd64go build main.gogo env -w CGO_ENABLED=0go env -w GOOS=linuxgo env -w GOARCH=amd64go build main.go
没有报错则生成成功。
然后拷贝新生成的文件到linux上,给授权:
greatwall@greatwall-os:~/soft/remoteAgent$ chmod 777 agent
启动:
greatwall@greatwall-os:~/soft/remoteAgent$ nohup ./agent &[1] 3524greatwall@greatwall-os:~/soft/remoteAgent$ nohup: 忽略输入并把输出追加到'nohup.out'
查看启动是否成功:
greatwall@greatwall-os:~/soft/remoteAgent$ netstat -an | grep 8999tcp 0 0 0.0.0.0:8999 0.0.0.0:* LISTEN
出现以上结果则恭喜你启动成功!
以上8999端口为程序配置的端口,所以查看配置端口就可以检查是否启动成功。
Golang 支持在一个平台下生成多个平台运行包,编译之后直接可执行,使用起来非常方便
1、Mac
Mac下编译Linux,Windows平台的64位可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
2、Linux
Linux下编译Mac,Windows平台的64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
3、Windows
Windows下编译Mac,Linux平台的64位可执行程序:
go env -w CGO_ENABLED=0go env -w GOOS=darwin3go env -w GOARCH=amd64go build main.gogo env -w CGO_ENABLED=0go env -w GOOS=linuxgo env -w GOARCH=amd64go build main.go
编译完成后记得还原配置即可:
更改前的配置如下:
go env -w CGO_ENABLED=1go env -w GOOS=windowsgo env -w GOARCH=amd64
GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows
GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm
Golang version 1.5以前版本在首次交叉编译时还需要配置交叉编译环境:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bashCGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash
