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

3 回复

感谢 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 设置。

回到顶部