Golang中导入路径不以主机名开头的问题如何解决

Golang中导入路径不以主机名开头的问题如何解决 希望有人能帮帮我。这是我第一次接触Go语言,体验很糟糕 😞

我从这里安装了Go语言:https://golang.org/doc/install

我严格按照针对我的操作系统CentOS 7的说明进行了操作。

然后我尝试编写我的第一个程序(如该页面所示)。

但当我尝试执行:

go build hello.go

它失败了: hello.go:3:8: 无法在任何位置找到包 “fmt”: /usr/local/go/src/fmt (来自 $GOROOT) /root/go/src/fmt (来自 $GOPATH) package main imports runtime: 无法在任何位置找到包 “runtime”: /usr/local/go/src/runtime (来自 $GOROOT) /root/go/src/runtime (来自 $GOPATH)

顺便说一句,我谷歌了这个问题,找到了很多答案,但都没有用。

提前感谢。


更多关于Golang中导入路径不以主机名开头的问题如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

可能是因为你将 Go 安装在 /root 目录下,这可能不是一个好主意。不过你了解自己系统的配置,也可能是 CentOS 特有的情况。

更多关于Golang中导入路径不以主机名开头的问题如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


可能是 $GOPATH 变量没有设置。请输入 echo $GOPATH

我不使用 CentOS,但有一次我从发行版的仓库安装了 Go,一切看起来都正常。然而,后来出现了问题,我意识到 $GOPATH 没有被设置。

我当前的 $GOPATH 设置为 "/home/bjc/go:/home/bjc/myApp",其中 myApp 是我存储 Go 程序的目录,"go" 是我安装 Go 的位置。"bjc" 是我的用户名。

希望这能有所帮助。

我刚升级到 Go 版本 14.1 并检查了一些内容。

GO 安装在 /usr/lib64/golang

/usr/bin/go 链接到了 /usr/lib64/golang/bin/go

/home/bjc/go 包含一个 src 目录,里面是我的包。

/home/bjc/go 还包含一个 pkg 目录,里面是我下载的包。

我第一次使用 go 14.1 时,它下载了我机器上已有的包的更新版本,这花了几分钟时间。看起来像是卡住了。然而,一旦我让第一次编译运行完成,后续的编译就如预期般快速了。

在早期的 GO 版本中,我不记得有这种延迟发生。

我希望你继续使用 GO;我认为它是一个非常好的产品,由懂行的人开发。这不是我对很多软件包都会做出的评价。

进一步思考你的问题后,我认为很可能是你的安装由于某些原因出错了。

此致, Bill

看起来你的Go环境配置有问题。让我帮你解决这个问题。

首先检查你的Go环境变量设置:

go env

你应该会看到类似这样的输出:

GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/root/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/root/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build123456=/tmp/go-build -gno-record-gcc-switches"

关键要检查的是:

  1. GOROOT 应该指向Go的安装目录(如 /usr/local/go
  2. GOPATH 应该指向你的工作目录(如 /root/go

如果你发现这些路径不正确,可以这样设置:

# 设置GOROOT
export GOROOT=/usr/local/go

# 设置GOPATH
export GOPATH=$HOME/go

# 将Go二进制文件添加到PATH
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

# 使设置永久生效(添加到~/.bashrc或~/.bash_profile)
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc

然后创建必要的目录结构:

# 创建GOPATH目录结构
mkdir -p $GOPATH/src
mkdir -p $GOPATH/pkg
mkdir -p $GOPATH/bin

现在让我们创建一个简单的测试程序:

// hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

编译并运行:

# 编译
go build hello.go

# 运行
./hello

如果仍然有问题,尝试清理Go的缓存:

go clean -cache
go clean -modcache

然后再次尝试编译。

另外,确保你的Go版本正确:

go version

对于CentOS 7,你可能需要确保安装了必要的开发工具:

yum groupinstall "Development Tools"
yum install glibc-devel

如果所有方法都失败了,可以尝试重新安装Go:

# 删除现有安装
rm -rf /usr/local/go

# 重新下载并安装
cd /usr/local
wget https://golang.org/dl/go1.19.linux-amd64.tar.gz
tar -xzf go1.19.linux-amd64.tar.gz

完成这些步骤后,你的Go环境应该能正常工作了。

回到顶部