function - 如何访问同一包中但来自不同文件的未导出函数

标签 function go export godoc

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

文件夹结构是,

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

我们如何在不同文件中使用同一包中未导出的函数?谁能帮我解决这个问题。另外,如果有人对如何构建 godoc.org 代码有任何想法?

最佳答案

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

参见 Spec: Packages :

A package in turn is constructed from one or more source files that together declare constants, types, variables and functions belonging to the package and which are accessible in all files of the same package.

Spec: Package clause :

A set of files sharing the same PackageName form the implementation of a package. An implementation may require that all source files for a package inhabit the same directory.

需要注意的一件事:您的示例似乎是特殊的 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

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

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

关于function - 如何访问同一包中但来自不同文件的未导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985137/

相关文章:

java - Orient DB - 使用JAVA导出指定类的子类

go - Gorm中不同表名的一对一关系

go - int 前的插入符号是什么意思?

php - 再次... php-mysql 导出 UTF-8 问题

c - 为什么我的代码只返回一个函数?

excel - VBA:在字符串中的大写字母之后或之前放置一个空格

function - 函数返回的常量是否自动成为指定返回变量的值

arrays - swift - 获取并附加 Firebase 值的函数返回空字符串

dictionary - 从 slice 图中删除重复项

svn - Subversion SSH导出问题