Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 在应用程序中导入本地库和文件_Go_Package - Fatal编程技术网

Go 在应用程序中导入本地库和文件

Go 在应用程序中导入本地库和文件,go,package,Go,Package,我是新手(但不擅长编程),我喜欢这种语言,但在完全理解通过包在应用程序中创建内部库的方法时有点困难。作为参考,获取外部包然后导入/使用它们是可以的 假设我正在申请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中,我操作

我是新手(但不擅长编程),我喜欢这种语言,但在完全理解通过包在应用程序中创建内部库的方法时有点困难。作为参考,获取外部包然后导入/使用它们是可以的

假设我正在申请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)和
导入lib/o
,但我不断遇到类似这样的错误

./a.go:6: imported and not used: "o"
./a.go:43: undefined: o
我的env中没有GOPATH,但我尝试了导出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(
go run a.go test.go
)中的所有文件,或者使用
go build
并运行生成的可执行文件。

您尝试使用go build系统,但不遵循必要的目录布局。你会从阅读中受益匪浅

简言之,这些工具包括go工具、show stoppers:

  • 您必须具有有效的导出GOPATH

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


有关更多详细信息,请参阅上面的链接文章。

如果两个文件位于同一目录中,则它们构成一个包。在同一个包的不同文件中声明符号不需要任何导入语句。@fuzzxl:您能看看我在问题末尾添加的简单示例吗?我似乎无法让它工作,我想我做了一件非常明显的错事,这让我很难受。感谢我自己,但我在这里得到了答案:要么列出go-run(
go-run a.go-test.go
)中的所有文件,要么使用
go-build
并运行生成的可执行文件。我遵循了那里的文档,我能够从应用程序a加载我的库o,路径为
GOPATH/src/a/a.go
GOPATH/src/o.go
,这很有效。谢谢但是,我不明白如何“包括”来自同一个包的文件,例如如何从a中包括位于
GOPATH/src/a/b.go
中的文件b?这不是一个库,只是多个文件中代码的分离。在您提供的链接中,streak包中有两个文件,
streak.go
如何包含和使用
oauth.go
?我不明白上面的信息如何回答在与.go相同目录的文件中使用结构的问题
$ go run a.go 
# command-line-arguments 
./a.go:4: undefined: test