Go语言: Using package name inside package scope (for Examples)

标签 go

我目前正在我的 Go 测试脚本中编写 ExampleFuncs。例如:

package hello

import "testing"

func ExampleGetSymbol() {
    data := GetSymbol("AAPL")
    fmt.Println(len(data.Data))
    // Output: 21
}

现在,这给我带来了两个好处:

  1. 此示例在我运行 go test 时执行,
  2. 它出现在 godoc 文档的 func GetSymbol

有一件事困扰着我,我想知道我是否应该对此做些什么。 对于尝试从此示例中学习的用户,该行

data := GetSymbol("AAPL")

实际上应该是

data := hello.GetSymbol("AAPL")

但是由于测试与包的范围相同,所以我不能这样使用它。

所以我想我的问题的精炼版本是:
有没有办法在包范围内允许 package.field 表示法?

提前致谢

最佳答案

不要将其放入 hello 包中,而是将其放入 hello_test 包中。您可以在同一目录中同时拥有 hellohello_test 包,并且它允许(要求)您按照您建议的方式创建示例。

顺便说一句,这也会导致您仅将测试用例(至少对于此文件)写入公共(public) API。这通常是一件好事。但如果您需要写入私有(private)函数,则可以将测试拆分为单独的文件,一些位于 hello 包中,一些位于 hello_test 中。

顺便说一句,这方面的文档有点被埋没了。您可以在go cmd documentation的“测试包”部分找到它。 .

关于Go语言: Using package name inside package scope (for Examples),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26267359/

相关文章:

go - 如何不舍入持续时间

google-app-engine - Google App Engine Golang 没有这样的文件或目录

logging - 使用 io.Multiwriter 跨包/子包创建日志

go - 如何获取与 WaitGroup 关联的 goroutines 的数量?

go - 在 golang 中执行进程内动态插件的一种方法

go - 从接口(interface)获取结构值

templates - Go模板中不区分大小写的字符串比较

go - 如何在所有包中访问全局变量

mysql - 如何处理 sql.ErrTxDone

ssh - 通过 shell 与 ssh 连接?