Golang入门问题:GOPATH路径配置问题
Golang入门问题:GOPATH路径配置问题
大家好,我遇到了路径配置的问题,目前我的 .zshrc 文件内容如下:
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
我的应用程序 main.go 只是一个典型的 “hello world” 程序,使用了 fmt 包。
当我运行命令:
$ go run src/github.com/ctfrancia/firstapp/main.go
终端会正常输出预期的结果 Hello!。
但是,当我运行:
$ go build src/github.com/ctfrancia/firstapp
却出现了以下错误:
无法加载包:包 src/github.com/ctfrancia/firstapp:在任何以下位置都找不到包 “src/github.com/ctfrancia/firstapp”: /usr/local/Cellar/go/1.12.6/libexec/src/src/github.com/ctfrancia/firstapp (来自 $GOROOT) /Users/c.francia/go/src/src/github.com/ctfrancia/firstapp (来自 $GOPATH)
我是通过 Homebrew 安装的 Go(因为我发现很多推荐都建议这样做,如果有更好的安装方式我也很乐意接受建议)。我注意到第三行显示的是 src/src/github....,但第二个 src 文件夹并不存在,这可能是问题的根源?
感谢任何帮助,我期待能在这个语言上不断学习和成长!
更多关于Golang入门问题:GOPATH路径配置问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
感谢 NobbZ,很抱歉问了这个非常愚蠢的问题
更多关于Golang入门问题:GOPATH路径配置问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
当给定一个.go文件时,go run会将参数视为文件路径并从中解析包。
而go build需要的是包路径,实际上你想要构建的包是github.com/ctfrancia/firstapp。
你的 GOPATH 配置是正确的,问题在于你使用了错误的构建命令路径。
在 Go 模块化之前的工作区模式下,go build 命令需要的是相对于 $GOPATH/src 的包路径,而不是包含 src 目录的完整路径。
正确做法:
将你的命令从:
go build src/github.com/ctfrancia/firstapp
改为:
go build github.com/ctfrancia/firstapp
或者,如果你在项目目录中,可以直接运行:
cd $GOPATH/src/github.com/ctfrancia/firstapp
go build
示例说明:
假设你的目录结构如下:
$HOME/go/
└── src/
└── github.com/
└── ctfrancia/
└── firstapp/
└── main.go
正确的构建命令:
# 从任何位置构建
go build github.com/ctfrancia/firstapp
# 或者在项目目录中构建
cd $HOME/go/src/github.com/ctfrancia/firstapp
go build
为什么 go run 可以工作而 go build 不行:
go run 接受文件路径作为参数,而 go build 需要包路径。当你运行 go run src/github.com/ctfrancia/firstapp/main.go 时,你指定的是具体文件,所以可以正常工作。
现代解决方案:
考虑使用 Go 模块来避免 GOPATH 的复杂性。在你的项目目录中运行:
cd $HOME/go/src/github.com/ctfrancia/firstapp
go mod init github.com/ctfrancia/firstapp
这样你就可以在任何位置构建项目,不再依赖 GOPATH 设置。

