go安装后,导入不会';我认不出这个包裹

go安装后,导入不会';我认不出这个包裹,go,package,goland,Go,Package,Goland,您好,我是Golang的新手,安装后我想在我的项目中使用下一个软件包: 创建项目后,我执行下一个命令来安装gingonic: go get -u github.com/gin-gonic/gin 但是这个导入在我的项目中是不被认可的,我知道这与我的GOROOT有关,但是我没能解决这个问题 接下来是我的Go env变量: GO111MODULE="on" GOARCH="amd64" GOBIN="" GOCACHE="/U

您好,我是Golang的新手,安装后我想在我的项目中使用下一个软件包:

创建项目后,我执行下一个命令来安装gingonic:

go get -u github.com/gin-gonic/gin
但是这个导入在我的项目中是不被认可的,我知道这与我的GOROOT有关,但是我没能解决这个问题

接下来是我的Go env变量:

GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/rpantoja/Library/Caches/go-build"
GOENV="/Users/rpantoja/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/rpantoja/go/pkg/mod"
GONOPROXY="github.com/mercadolibre"
GONOSUMDB="github.com/mercadolibre"
GOOS="darwin"
GOPATH="/Users/rpantoja/go"
GOPRIVATE="github.com/mercadolibre"
GOPROXY="http://goregistry.furycloud.io/"
GOROOT="/usr/local/Cellar/go/1.15/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.15/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
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 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/gz/zfy97n595rs5w_t0dr9wr29dzzxvs4/T/go-build960054223=/tmp/go-build -gno-record-gcc-switches -fno-common"
我的项目是这样配置的:

安装软件包后:


使用模块设置新Go项目的步骤:

  • 已经安装好了。最好是最新版本,最好>=v1.13,默认为Go模块。对于go1.11及以上版本,您必须执行一些额外的步骤来启用Go模块
  • 为项目创建新文件夹。最好不要在GOPATH中。默认情况下,GOPATH是~/go,因此创建您自己的项目文件夹,例如
    mkdir~/projects
    ,然后
    mkdir~/projects/myproject
  • 所有进一步的命令都从新项目根目录运行,因此最好在那里切换:
    cd~/projects/myproject
  • 在新创建的文件夹中,run
    go mod init projectPath
    其中
    projectPath
    应该是未来git回购的URL(例如
    github.com/myname/myproject
    )。这将在当前文件夹中创建
    go.mod
    文件。它将包含您在
    go mod init
    中使用的模块名称以及当前安装的go版本作为最低版本。(暂时不要担心,它不会妨碍你)如果你不打算发布你的项目,你可以给你的项目命名任何东西。但是,如果这与另一个包或模块名称冲突,您就有麻烦了
  • 现在,您可以运行
    go-get-github.com/gin-gonic/gin
    (不要使用
    -u
    ,这很危险,因为它会更新所有子依赖项,而不是使用gin开发人员使用的依赖项)。这应该将
    github.com/gin-gonic/gin
    作为一项要求添加到您的
    go.mod
    文件中。如果要更新依赖项,只需再次调用
    获取depPath
    。它会将您的
    go.mod
    文件中的依赖项版本更新为可用的最新版本。如果您想升级/降级到特定版本,请使用
    获取depPath@vX.Y.Z
  • 创建你的
    main.go
    并在其中使用
    github.com/gin-gonic/gin
  • 使用
    go mod tidy
    删除所有未使用的导入,或将缺少的导入添加到
    go.mod
    。(通常你不需要编辑
    go.mod
    go-mod-tidy
    会为你做这件事。)它也会整理你的
    go.sum
    文件,该文件保存所有依赖项的校验和。您可以查看该文件,但(通常)永远不必编辑它
    go mod tidy
    将为您完成此操作
  • 在Goland中,最重要的是确保启用了
    Go模块集成
    。默认情况下,其他设置应正确
  • 如果依赖项仍然存在问题,可以尝试使用
    goclean-modcache
    。它将清除整个本地模块缓存,因此您需要再次下载所有模块。如果模块缓存被搞砸了,这有时会有所帮助。但这不应该正常发生

  • 希望这有帮助。如果没有,请告诉我,以便添加缺少的部分。

    编译器报告了什么错误?在s.O.上有一段关于自制Go安装的无法解释的问题的历史。考虑切换到。你在项目的根目录中有代码> > init < /COD>模块文件吗?不要使用HOBBURW的GO。根据“如何编写Go代码”正确设置项目。在命令行上生成项目。不要发布图像。如果您使用GOPATH而不是Go模块,请在设置中禁用Go模块集成。您还可以将鼠标悬停在导入和执行
    选项+输入
    快捷方式上,然后选择使用go模块的另一种方式:
    执行内置终端中的go mod init
    ,然后禁用GOPATH索引(
    首选项| go | GOPATH |索引整个GOPATH
    ),并将鼠标悬停在导入上,
    选项+输入
    ,同步依赖项…我有点惊讶于
    不使用-u,这很危险,因为它会更新所有子依赖项,而不是使用gin开发人员使用的依赖项。我签入了
    go help get
    ,它(对我)不是很清楚。你有参考资料吗?在
    go get
    文档上:它说
    -u
    将更新你的软件包和所有依赖项。如果您的依赖项有一个
    go.mod
    文件,说明它需要哪些版本的依赖项,
    -u
    将忽略这些依赖项并更新子依赖项。这就是为什么我说这是“危险的”。理论上永远不会有问题,因为同一主要版本的所有更高版本都应该兼容,但是。。。你知道:现实并不是那么简单。澄清一下,这是关于版本约束(即:1.X.X)中具有浮动兼容性的约束。所以这是一个例外的行为。虽然我同意这需要对图书馆作者的信任,但我们可以将其恢复为“危险的”。我不是说作者的恶意意图。我说的是gin的作者创建了一个gin版本,该版本经过了dependency Y的版本X的测试,3周后dependency Y发布了一个新版本,它改变了一些稍微影响gin包的行为。如果您使用
    go-get-u
    go将使用新版本的dependency Y,即使gin的
    go.mod
    仍然使用旧版本,因为这是经过测试的稳定版本。当然,这是一个理论案例(例如:金酒)。我只知道我在工作中遇到了这个问题。是的,我同意你所描述的场景。这里没有恶意。这只是塞默。是的,它可以打破IRL。