首页 > 解决方案 > 在项目目录中找不到包

问题描述

在过去的两个小时里,我一直在尝试解决这个问题。对于我的生活,我无法理解开发 Go 的人如何在语言方面做得如此出色,但在包管理方面却做得如此糟糕。

这是我的go env输出:

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/<me>/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/<me>/Documents/Proj/go"
GORACE=""
GOROOT="/usr/local/opt/go/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/opt/go/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
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/z4/b3lxy_51405_b8pb_680l4xh0000gn/T/go-build063693521=/tmp/go-build -gno-record-gcc-switches -fno-common"

请注意,我的GOPATHGOROOT已设置。

这是我的 go 工作区 ( /Users/<me>/Documents/Proj/go) 的结构:

go/
|-bin/
|-pkg/
|-src/
  |--github.com/
    |--user/
      |--myproject/
        |--client/
          |--client.go
        |--main.go

这是我的client.go文件:

// client.go
package client

type MyClient struct {}

这是我的main.go文件:

// main.go
package main

import "client"

func main() {}

当我go build在项目根目录中运行时,出现此错误:

main.go:4:2: cannot find package "client" in any of:
    /usr/local/opt/go/libexec/src/transport (from $GOROOT)
    /Users/<me>/Documents/Proj/go/src/transport (from $GOPATH)

第一次发生这种情况时,我试图更正上面的路径:

// main.go
package main

import "github.com/user/myproject/client"

func main() {}

然后我得到了这个错误:

main.go:4:2: cannot find package "client" in any of:
    /usr/local/opt/go/libexec/src/transport (from $GOROOT)
    /Users/<me>/Documents/Proj/go/src/github.com/user/myproject/transport (from $GOPATH)

这很奇怪,因为包存在于那个确切的路径上。

我究竟做错了什么??

标签: go

解决方案


在这种特殊情况下,您不应该 import client 而是从哪个路径来,因为那是您的路径。GOPATH/srcgithub.com/user/myproject/client

我看到您描述问题的方式与计算机上的方式不完全一样。你换了一些东西。这是可以理解的,你不想告诉全世界你的电脑是什么样子的。所以你用“ <me>”代替了你的名字。

您还替换了项目名称,MyProject在您的问题中,就像用户名一样,这是我们看不到的潜在错误点,因为您替换了它。永远不要在 Windows 上的开发路径中使用长名称,因为 Windows 有时会对它们进行恶作剧。

我确信有些事情是个问题。尝试在 go-path 中使用您的短目录名称。检查这个:https ://superuser.com/questions/1182040/strange-short-path-name-on-windows


推荐阅读