【问题标题】:Go cannot find packages in go/pkg looking in go/srcGo 在 go/pkg 中查找 go/src 时找不到包
【发布时间】:2021-11-12 07:59:56
【问题描述】:

尝试使用 GoLang 和 MQTT,但 go 似乎找不到包。

% go version
go version go1.16.7 darwin/amd64

foobar.go

package main

import (
    "fmt"
    "log"
    "os/exec"
    "time"
    mqtt "github.com/eclipse/paho.mqtt.golang"
)

尝试运行时会出现以下错误

go run foobar.go
foobar.go:9:2: no required module provides package github.com/eclipse/paho.mqtt.golang: go.mod file not found in current directory or any parent directory; see 'go help modules'
% go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/{user}/Library/Caches/go-build"
GOENV="/Users/{user}/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/{user}/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/{user}/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.16.7"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
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 -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/rg/80kn_qfn0_91cv0_fb43_m5r0000gn/T/go-build2547135435=/tmp/go-build -gno-record-gcc-switches -fno-common"

我设置了 $GOPATH 和 $GOROOT 来匹配 go 环境。我什至尝试通过设置 GO111MODULE="off" 回到旧的路径方法,但这导致了这个错误

% go run foobar.go
foobar.go:8:2: cannot find package "github.com/eclipse/paho.mqtt.golang" in any of:
    /usr/local/go/src/github.com/eclipse/paho.mqtt.golang (from $GOROOT)
    /Users/{user}/go/src/github.com/eclipse/paho.mqtt.golang (from $GOPATH)

我很困惑,因为go get/install github.com/eclipse/paho.mqtt.golang 似乎正在安装我的软件包,而我的软件包正在安装在 go/pkg/ 下,而上面的输出和我阅读的所有文档都表明 /src 那么为什么我有 /pkg 目录。

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    请使用模块。您不应该设置GOROOTGOPATH

    我建议通过以下路径,使用官方文档页面:

    1. 阅读properly installing Go for your platform
    2. 阅读getting started tutorial,它还告诉您如何安装第 3 方包并在您的代码中使用它们。

    完成这些步骤所需的时间不会超过 20 分钟,而且几乎可以肯定,您将能够在该过程结束时实现目标。作为奖励,请继续阅读第一页之后的入门指南,以了解如何创建自己的 Go 模块、从其他模块中使用它们、编写测试、build 将您的代码转换为二进制文件等等。

    恕我直言,这是尝试编写 Go 程序所需的最低背景;如果不经过这些步骤,您将缺乏关键的基础知识,甚至很难理解 SO 的答案。

    【讨论】:

    • 首先感谢您抽出宝贵时间提出一个新手问题。我确实让事情为我工作,但我仍然感到困惑。我阅读了文档并且不理解关于模块(不是包)路径的link 部分。特别是模块指令命名约定
    • @KevinRiordan:不要担心现在阅读整个参考文档 - 只需在出现具体问题时参考它即可。我不清楚您具体不了解什么,但请考虑为此提出一个单独的问题。很高兴听到问题已解决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2018-10-24
    • 2021-01-15
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多