7

这是目录树:

+/project  
  +---/bin  
  +---/pkg  
  +---/src  
    +---/client_test  
      +---client_test.go  
    +---main.go  

在 main.go 中:

package main
import ("client_test")
func main() {
  client_test.Send()
}

在 client_test.go 中:

package client_test
func Send() {
}

错误:

src/main.go|8| imported and not used: "client_test"
src/main.go|32| undefined: client_test

我读过如何在 golang 中使用自定义包?我想我和这个人有同样的解决方案,但我只是不知道如何解决这个问题。请帮忙。

去环境:

GOARCH="amd64"  
GOBIN="/usr/local/go/bin"  
GOCHAR="6"  
GOEXE=""  
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"  
GOHOSTARCH="amd64"  
GOHOSTOS="darwin"  
GOOS="darwin"  
GOPATH="/Users/staff/projects/Minigame_Server" (that's exactly my working directory)  
GOROOT="/usr/local/go"  
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"  
CGO_ENABLED="1"  
4

4 回答 4

11

命令去,测试包。

...名称与文件模式“*_test.go”匹配的文件...可以包含测试函数、基准函数和示例函数。

不要使用保留名称。例如,client_testclienttest整个替换。

于 2013-03-14T12:38:19.503 回答
1

好的,最后我发现我的环境有什么问题:

由于我使用的是 OS X,所以我使用 .pkg 文件来安装 go,而 GOROOT 是“/usr/local/go”

然后我读了另一个关于 GO 安装的假教程,它说我必须在我的 ~/.profile 中定义 GOROOT,所以我在 ~/.profile 中添加了“GOROOT="/usr/local/go",然后一切都出错了。

仔细阅读官方文档后发现:

Go 二进制发行版假定它们将安装在 /usr/local/go(或 Windows 下的 c:\Go)中,但也可以将它们安装在不同的位置。如果这样做,则需要在使用 Go 工具时将 GOROOT 环境变量设置为该目录。

例如,如果您将 Go 安装到您的主目录,您应该将以下命令添加到 $HOME/.profile:

导出 GOROOT=$HOME/go 导出 PATH=$PATH:$GOROOT/bin

但问题是,它没有提到如果你在.pkg 安装后在~/.profile 中添加GOROOT 会发生什么,它也没有说你不能这样做。

这是我的 ~/.profile 现在的样子(正在纠正):

导出 GOPATH=$HOME/projects/ 导出 PATH=$PATH:$GOPATH/bin

顺便说一句:您不需要在工作区下创建 /project 文件夹。根据http://golang.org/doc/code.html#tmp_2,它也没有说你必须:

工作区目录树现在如下所示:

bin/
    hello              # command executable
pkg/
    linux_amd64/ 
        example/
            newmath.a  # package object
src/
    example/
        hello/
            hello.go   # command source
        newmath/
            sqrt.go    # package source
于 2013-03-14T12:54:29.900 回答
0

如果你的 $GOPATH 是“/Users/staff/projects/Minigame_Server”,那么你的“项目”绝对路径应该是“/Users/staff/projects/Minigame_Server/src/project”。

您的导入应该是import "project/src/client_test".

或者,如果您在“项目”下有与 Go 相关的子目录“/pkg”和“/bin”,您似乎想要做的事情,请将您的 GOPATH 设置为“/Users/staff/projects/Minigame_Server/project”

然后你就可以了import "client_test"。基本思想是 Go 会将导入字符串附加到 $GOPATH/src/。

(有点模棱两可,我同意)文档在这里: http: //golang.org/doc/code.html#tmp_2。我的猜测是您已经阅读了它,这就是您创建 /pkg、/bin 和 /src 子目录的原因,但关键是 GOPATH 应该在哪里,然后 Go 在查找导入时自动添加的隐式子级别(自动添加/src),然后按原样导入字符串。

于 2013-03-14T12:21:09.423 回答
-1

您可以使用以下代码在主包中导入包,它将在主包中导入(“fmt”“./client_test”)

于 2013-06-18T11:46:54.093 回答