【问题标题】:Importing local library and files in an application在应用程序中导入本地库和文件
【发布时间】:2013-05-21 13:07:07
【问题描述】:

我是 Go 新手(但不擅长编程),我喜欢这门语言,但我在完全理解我应该通过包在应用程序中创建内部库的方式时遇到了一些麻烦。作为参考,获取外部包然后导入/使用它们就可以了。

假设我正在制作一个应用程序 A。

/home/me/A/a.go (package main)

然后,我发现a.go开始比较大,所以我把它分成了两部分

/home/me/A/a.go (package main)
/home/me/A/b.go (package main)

我应该如何从 a.go 导入/包含 b.go 以使其功能可用?

作为问题的延续,在 A 中我正在操作很多对象 O,所以我认为如果我给它们自己的包并将功能封装在公共/导出的 api 中会好得多。我该怎么做?

我尝试创建./lib/o.go(包o)和import lib/o,但我不断收到类似的错误

./a.go:6: imported and not used: "o"
./a.go:43: undefined: o

我的环境中没有 GOPATH,但我尝试了 export GOPATH=$GOPATH:/home/me/A 并没有改变结果。

我曾尝试阅读有关“go layout”的文章,但它立刻感觉有点过头了,我真的很想对我正在尝试做的那个“小”步骤进行更简单的解释

谢谢!

GOPATH/src/me/a/a.go:

package main

func main() {
        test()
}

GOPATH/src/me/a/test.go:

package main

import "fmt"

func test() {
        fmt.Println("test func !")
}

执行:

$ go run a.go 
# command-line-arguments 
./a.go:4: undefined: test

编辑:在这里得到我的答案:https://groups.google.com/forum/?fromgroups#!topic/golang-nuts/qysy2bM_o1I

要么列出 go run (go run a.go test.go) 中的所有文件,要么使用 go build 并运行生成的可执行文件。

【问题讨论】:

  • 如果两个文件在同一个目录下,它们就形成一个包。不需要 import 语句来获取在同一包的不同文件中声明的符号。
  • @FUZxxl:您能看看我在问题末尾添加的简单示例吗?我似乎无法让它工作,我想我正在做一些明显错误的事情,它让我无法接受。谢谢
  • 回答自己,但在这里得到了我的答案:groups.google.com/forum/?fromgroups#!topic/golang-nuts/… 要么列出 go run (go run a.go test.go) 中的所有文件,要么使用 go build 并运行生成的可执行文件。

标签: go package


【解决方案1】:

您正在尝试使用 Go 构建系统,但没有遵循必要的目录布局。阅读this document,你会受益匪浅。

简而言之,这些是 go 工具,显示停止器:

  • 必须有一个有效的、导出的 GOPATH

  • 导入路径为“example/foo”的包文件必须位于$GOPATH/src/example/foo目录中。

更多详情请查看以上链接文章。

【讨论】:

  • 我已经关注了那里的文档,我可以从应用程序 a 中加载我的库 o,路径为 GOPATH/src/a/a.goGOPATH/src/o/o.go,这是有效的。谢谢 !但是,我不明白如何从同一个包中“包含”一个文件,例如,我如何从位于 GOPATH/src/a/b.go 的文件 b 中包含一个文件?这不是一个库,只是多个文件中的代码分离。在您提供的链接中,他们在 streak 包中有两个文件,streak.go 如何包含和使用oauth.go
  • 我不明白上面的信息如何回答在与 a.go 位于同一目录的文件中使用结构的问题
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多