【问题标题】:Go: cannot find package "fmt" error去:找不到包“fmt”错误
【发布时间】:2020-10-19 11:05:13
【问题描述】:

我正在尝试在 go 中关注一个简​​单的 Hello, World 应用程序:

package main

import (
    "fmt"
)

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

但是当我构建并运行它时,我得到以下错误:

main.go:5:2: cannot find package "fmt" in any of:
    /home/user/go/src/pkg/fmt (from $GOROOT)
    /home/user/gocode/src/fmt (from $GOPATH)
package test_program
    imports runtime: cannot find package "runtime" in any of:
    /home/user/go/src/pkg/runtime (from $GOROOT)
    /home/user/gocode/src/runtime (from $GOPATH)

这是go env的输出:

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/user/gocode"
GORACE=""
GOROOT="/home/user/go"
GOTOOLDIR="/home/user/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"

【问题讨论】:

  • fmt/fmt.go在哪里?
  • 我不确定,我刚刚做了apt-get install golang 然后设置了我的GOPATH

标签: go


【解决方案1】:

Unset GOROOT - go 工具知道它们应该在哪里,您很少需要设置它。

您已将其设置为 /home/user/go,除非您在那里构建,否则不太可能是找到 fmt 包的正确位置。

【讨论】:

  • 如何取消设置 GOROOT?
  • 要为当前会话取消设置 GOROOT,输入“unset GOROOT”。但是,您可能希望永久取消设置;在这种情况下,只需从设置变量的配置文件中删除设置变量的行(例如,/etc/profile 或 ~/.bash_profile)
  • 值得一提的是,如果您将 Go 安装在非标准位置,您应该设置 GOROOT - 最好阅读整个 blog post 以了解“标准位置”是,因为它取决于您安装 Go 的方式。
【解决方案2】:

不要使用apt-get 来安装,只需下载binaries 并将它们解压缩到您的主(或任何)目录。

要在您的终端中获得go tool,您必须将export PATH=$PATH:$GOROOT/bin 行添加到您的~/.bashrc

【讨论】:

  • 我同意你的观点,但你应该解释一下为什么不使用 apt-get:Go 开发正在快速发展,Linux 发行版很可能有过时的版本他们的存储库。
  • 如果你想从一个包中安装 go,那么我推荐godeb,它从最新的 go on the fly 二进制版本构建一个 debian 包
【解决方案3】:

运行go run case.go 命令失败后。我尝试在新的 ubuntu 16.04 环境中使用 apt 安装。

apt install golang

此后,go run case.go 将按预期运行。

我猜问题是你不应该设置 GOROOT

一旦你发现 GOROOT 不像“/usr/lib/go-{version}”,

你已经处于错误的境地。立即使用unset GOROOT。将其添加到/etc/profile~/profile~/.bashrc 等以永久生效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 2014-01-27
    • 2018-06-13
    • 2013-06-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多