当前位置 博文首页 > Go打包二进制文件的实现

    Go打包二进制文件的实现

    作者:赵栩彬 时间:2021-02-18 09:03

    背景

    众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。

    操作

    需求:打包部署到centos7
    笔者打包环境:mac os
    方法:进入main.go所在目录,输入如下命令,当前目录便会生成main的可执行文件

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

    Windows平台打包到Linux执行不一样,需要输入如下命令

    set CGO_ENABLED=0
    set GOOS=linux
    set GOARCH=amd64
    go build
    • CGO_ENABLED 表示不使用cgo
    • GOOS 表示目标平台系统(Windows,linux,darwin「mac os」等等)
    • GOARCH 表示目标系统架构(arm arm64 386 amd64 等等)

    打包完成后,将二进制文件放到服务器系统,赋可执行权限:

    chmod 773 main

    直接运行即可:

    ./main

    或后台执行:

    nohup ./main 1>info.log 2>&1 &

    linux 后台运行程序

    一般为了程序后台运行,我们需要使用nohup命令.
    此时需要对程序运行时所产生的输出信息记录,因此就需要使用linux的信息输出命令

    一个例子

    比如要让redis-server程序后台运行
    1.非后台运行:

    $> ./redis-server
    

    2.后台运行:

    $> nohup ./redis-server 1>/dev/null 2>&1 &
    
    • 其中数字1代表标准输出,2代表错误信息输出,还有未使用的标准输入即数字0.
    • 1>/dev/null 2>&1 &的意思是标准信息输出到空设备即不做任何处理,也不做任何显示,/dev/null也可以替换为文本文件名(如 out.log),此时标准信息就会输出到指定文件.
    • 2>&1表示错误信息输出到标准输出,即输出同1>后面的位置,当然也可以直接指定新文件名(如 err.log).
    • 最后的& 表示程序后台运行

    上面的命令还可简写:

    nohup ./redis-server >/dev/null 2>&1 &
    

    即去掉标准输出数字1

    后台运行一个程序

    1.先用 netstat -tln 查看端口信息
    2.isof -i:端口 可以找到程序进程号PID
    3.kill PID 可以关闭程序

    如此便是go打包到linux平台的完整操作,欢迎大家指证。

    js