【问题标题】:How do I make go find my package?如何让 go find 我的包裹?
【发布时间】:2012-05-22 23:12:45
【问题描述】:

我应该把我的包放在哪里,以便它可以被另一个包导入?

$ tree
.
├── main.go
└── src
    └── test.go

1 directory, 2 files

$ cat src/test.go 
package test

$ cat main.go 
package main

import "test"

$ go build main.go 
main.go:3:8: import "test": cannot find package

【问题讨论】:

    标签: go


    【解决方案1】:

    有一些事情需要发生。您必须先安装“测试”包:

    $ export GOPATH=$(pwd)   # Assumes a bourne shell (not csh)
    $ mkdir src/test
    $ mv src/test.go src/test/test.go
    $ mkdir pkg                 # go install will put packages here
    $ go install test           # build the package and put it in $GOPATH/pkg
    $ go build main.go
    

    请注意,不必创建 pkg,因为 go install 会为您创建。 一旦你安装了测试包(通常是一个坏名字,顺便说一句)go build main.go 现在应该给出不同的错误(例如,“导入但未使用”)

    【讨论】:

    • 迄今为止对新手最清晰的解释。
    【解决方案2】:

    设置你的 GOPATH。将您的包 foo 源代码放入 GOPATH/src/optional-whatever/foo/*.go 并在代码中使用它

    import "optional-whatever/foo"
    

    不需要显式安装 foo,go 工具是一个构建工具,它会在必要时自动为您完成。

    【讨论】:

    • 澄清:包将是一个目录(例如'foo')。您将文件夹作为模块导入,而不是单个源文件。
    • 这个答案清楚地表明我们需要限制自己将所有包放在$GOPATH中。直到现在我都很困惑。这是一个上下文 - github.com/golang/dep/issues/1441
    【解决方案3】:

    也许,您可以将 test.go 文件与 main.go 放在同一目录中,然后 在 test.go 中,它使用了这样的东西:

    import "./test"
    

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2018-12-11
      • 2014-10-20
      • 2011-07-25
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多