Windows环境下 Go项目迁移至Ubuntu(WSL) 以部署filebeat为例

发布于:2025-07-25 ⋅ 阅读:(15) ⋅ 点赞:(0)

1、先在Ubuntu操作系统下,配置go语言环境【需要go build ,当然如果你是打算在外界编译成可执行文件,然后丢到wsl,可以不要配置go环境】

配置go流程如下:【注意,如果有旧版本,记得先删除,否则后面项目运行不起来】

报错

 Load redeclared in this block

①先拉包 :wget  https://golang.google.cn/dl/go1.24.2.linux-amd64.tar.gz 
中间的版本,可以随意更改,go.mod用的是1.24.2

②然后再解压:tar -xvzf go1.24.2.linux-amd64.tar.gz -C /usr/local/

③配置环境变量:

        编辑用户的bashrc文件
        nano ~/.bashrc

        文件末尾加这三行
        export GOROOT=/usr/local/go
        export GOPATH=$HOME/go
        export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

        刷新
        source ~/.bashrc

配置go env 【一般开启Module模式和更改proxy 】
默认官方直链,没梯子很慢。可以更换cn站点

go env -w GO111MODULE=on

go env -w GOPROXY=https://goproxy.cn,direct

2、完成以上操作go 可以正常使用了,我们切到项目下,直接go build 命令,自动帮我们下载依赖
当然,如果想更改版本,可以:go get package@version 指定版本

比如我在项目中需要更改filebeat的版本: go get github.com/elastic/beats/v7@v7.17.29 

更改后,记得go mod tidy ,否则项目编译会报错
还有当你把go.mod文件删除后,重新go mod init + ModuleName ,也是需要go mod tidy的,否在会报错【当然,如果你go mod tidy 了还报错,就需要检查你当前路径是否在GOPATH下,如果在的话可以切换GOPATH路径,或者退出GOPATH路径,这也是Module模式和GOPATH模式的区别】

报错:
cannot determine module path for source directory

3、项目编译 :go build -o filebeat . 【-o 指定编译后的文件名称】

生成可执行文件后,还不能立即使用【这个时候只是普通文件】,我们还需要更改操作权限:
chmod 777 文件名

4、项目运行:当文件变成可执行文件后,通过命令 ./filebeat -e -c filebeat.yml执行程序

如果你的整个源码是通过从windows拖过来的,你的文件的拥有者可能只是普通用户,这个时候如果你是root用户,想执行这个可执行文件,可能会报错:

报错:error loading config file: config file ("filebeat.yml") must be owned by the user identifier (uid=0) or root

通过ll 可以查看当前路径下的文件的拥有者,如果不是现在本人,通过命令:
chown -R root:root 文件路径 【-R 表示递归 冒号前后表示用户以及用户组】

最后我还碰到一个报错:

runtime/cgo: pthread_create failed: Operation not permitted

SIGABRT: abort

通过查阅大量文档,最后解决方案是,提升filebeat的版本,通过我上面将的 go get 提升到了7.17.29解决问题。


网站公告

今日签到

点亮在社区的每一天
去签到