如何在同一个包中访问未导出的函数,但是来自goalng中的不同文件?

时间:2015-10-07 06:24:45

标签: function go export godoc

我正在尝试在我的本地构建godoc.org源代码以进行一些更改。我的工作目录是/Users/Dany/go/src/github.com/golang/gddo。在gddo-server包中有几个文件。其中一个go文件使用另一个文件中的函数,该函数位于同一个包中但未导出。它抛出Undefined: <function-name>例外。

文件夹是结构,

golang/gddo/
              gddo-server
                        main.go
                        crawl.go

我们如何在不同文件中使用同一包中的未导出函数?任何人都可以帮助我。如果有人对如何构建godoc.org代码有任何想法吗?

1 个答案:

答案 0 :(得分:4)

同一个包的源文件可以毫不费力地引用任何源文件中定义的标识符。如果它们位于同一个文件夹中并且它们具有相同的包声明,则可以引用所有包级别的导出和未导出的标识符,就好像所有标识符都已在一个文件中定义一样。

请参阅Spec: Packages

  

一个包又由一个或多个源文件构成,这些源文件一起声明属于包的常量,类型,变量和函数,并且可以在同一个包的所有文件中访问。

Spec: Package clause

  

一组共享相同PackageName的文件形成包的实现。实现可能要求包的所有源文件都位于同一目录中。

有一点需要注意:您的示例似乎是特殊的main包。如果要使用go run运行它,则必须枚举所有源文件。

要使用go run运行示例,请导航至gddo-server文件夹并输入:

go run background.go browse.go client.go crawl.go graph.go main.go play.go template.go 

如果你第一次构建它,或者更简单。导航到gddo-server文件夹并输入:

go build

这将在同一文件夹中生成本机可执行二进制文件。要运行它,请键入:gddo-server(在Windows上)或./gddo-server(在Linux上)。

或者您可以使用go install安装它,这会将结果可执行二进制文件放在$GOPATH/bin文件夹中。