在Ubuntu系统下使用Golang进行开发时,一个基础但关键的问题就是:Golang编译生成的二进制文件到底存放在哪里?默认情况下,答案很简单——就在你执行go build命令的那个目录里。不过,在实际开发中,我们往往需要更灵活的二进制文件输出控制,比如将可执行文件放到指定路径,或者进行跨平台交叉编译。下面就来详细说说这些Golang编译输出路径的门道。

一、默认输出位置
在Ubuntu系统中,使用go build命令编译Golang项目时,默认会将二进制文件生成在当前工作目录下。这里的“当前工作目录”指执行go build命令时终端所在的目录。举个例子,如果你的项目源码位于/home/user/projects/hello目录,并且你就在这个目录下执行go build,那么编译生成的二进制文件会直接出现在/home/user/projects/hello中。二进制文件的名称默认与项目目录名或main包所在文件名一致——如果项目目录名叫hello,二进制文件就叫hello;如果源文件是main.go,有时会生成main.out,但更常见的是直接取目录名。总之,Golang编译的默认行为就是“原地生成”,简单直接。
二、自定义输出路径的方法
如果需要把二进制文件放到指定目录,或者想换个文件名,用go build的-o(output)选项就能搞定。基本格式是:go build -o <输出路径/文件名> <源文件或包路径>。下面看几个典型的Golang编译输出路径场景。
- 示例1:指定目录和文件名 想把二进制文件输出到
/usr/local/bin目录,并命名为myapp,命令是:go build -o /usr/local/bin/myapp main.go。执行后二进制文件会保存在/usr/local/bin/myapp。注意,这需要当前用户对/usr/local/bin有写入权限,否则得用sudo提升权限。 - 示例2:输出到项目内的
bin目录 为了保持项目结构整洁,推荐在项目根目录下建一个bin文件夹专门存放编译产物。然后这样操作:go build -o bin/myapp ./cmd/server。这会把./cmd/server包编译出的可执行文件保存到bin文件夹里。记得提前创建好bin目录(mkdir -p bin)。 - 示例3:跨平台编译并自定义输出 假如你在Ubuntu上想编译一个Windows可执行文件,可以结合
GOOS(目标操作系统)、GOARCH(目标架构)环境变量和-o选项。例如:GOOS=windows GOARCH=amd64 go build -o bin/myapp.exe ./main.go。这样就会生成Windows平台的myapp.exe,并保存到项目根目录下的bin中,实现Golang跨平台编译。
三、注意事项
- 权限问题:如果把二进制文件输出到系统目录(比如
/usr/local/bin),务必确保当前用户有足够权限。通常的做法是加sudo,比如sudo go build -o /usr/local/bin/myapp main.go。 - 版本控制:Golang编译产物(二进制文件)通常不应该被提交到Git仓库。建议把
bin目录添加到.gitignore文件中,比如加上一行bin/,这样仓库里只保留源码,干净清爽。
