英文:
Why doesn't godoc skip examples in golang?
问题
我正在尝试制作文档并提供示例,但我不知道如何做,因为godoc跳过了我的示例。
当我在浏览器中访问localhost:8080/pkg/hello_example
时,终端上会打印出以下内容:
2014/07/01 15:54:29 跳过示例'ExampleAuthenticate',因为'Authenticate'不是已知的函数或类型
2014/07/01 15:54:29 跳过示例'ExampleGetAllowAllDriver',因为'GetAllowAllDriver'不是已知的函数或类型
2014/07/01 15:54:29 跳过示例'ExampleGetAndUseAllowAllDriver',因为'GetAndUseAllowAllDriver'不是已知的函数或类型
2014/07/01 15:54:29 跳过示例'ExampleGetAndUseDenyAllDriver',因为'GetAndUseDenyAllDriver'不是已知的函数或类型
2014/07/01 15:54:29 跳过示例'ExampleGetDenyAllDriver',因为'GetDenyAllDriver'不是已知的函数或类型
2014/07/01 15:54:29 跳过示例'ExampleGetRedisDriver',因为'GetRedisDriver'不是已知的函数或类型
2014/07/01 15:54:30 跳过示例'ExampleAuthenticate',因为'Authenticate'不是已知的函数或类型
2014/07/01 15:54:30 跳过示例'ExampleGetAllowAllDriver',因为'GetAllowAllDriver'不是已知的函数或类型
2014/07/01 15:54:30 跳过示例'ExampleGetAndUseAllowAllDriver',因为'GetAndUseAllowAllDriver'不是已知的函数或类型
2014/07/01 15:54:30 跳过示例'ExampleGetAndUseDenyAllDriver',因为'GetAndUseDenyAllDriver'不是已知的函数或类型
2014/07/01 15:54:30 跳过示例'ExampleGetDenyAllDriver',因为'GetDenyAllDriver'不是已知的函数或类型
2014/07/01 15:54:30 跳过示例'ExampleGetRedisDriver',因为'GetRedisDriver'不是已知的函数或类型
^C%
我不明白,所以我不能随意命名示例吗?示例的名称必须与我的包或文件的函数名称匹配吗?这是在我的测试包中,所以我可能正在尝试测试不同包和文件中的函数。我该怎么做?
英文:
I was trying to make a documentation and provide examples but I didn't understand how to because godoc was skipping my examples.
when I go to localhost:8080/pkg/hello_example
on the browser it print on the terminal:
2014/07/01 15:54:29 skipping example 'ExampleAuthenticate' because 'Authenticate' is not a known function or type
2014/07/01 15:54:29 skipping example 'ExampleGetAllowAllDriver' because 'GetAllowAllDriver' is not a known function or type
2014/07/01 15:54:29 skipping example 'ExampleGetAndUseAllowAllDriver' because 'GetAndUseAllowAllDriver' is not a known function or type
2014/07/01 15:54:29 skipping example 'ExampleGetAndUseDenyAllDriver' because 'GetAndUseDenyAllDriver' is not a known function or type
2014/07/01 15:54:29 skipping example 'ExampleGetDenyAllDriver' because 'GetDenyAllDriver' is not a known function or type
2014/07/01 15:54:29 skipping example 'ExampleGetRedisDriver' because 'GetRedisDriver' is not a known function or type
2014/07/01 15:54:30 skipping example 'ExampleAuthenticate' because 'Authenticate' is not a known function or type
2014/07/01 15:54:30 skipping example 'ExampleGetAllowAllDriver' because 'GetAllowAllDriver' is not a known function or type
2014/07/01 15:54:30 skipping example 'ExampleGetAndUseAllowAllDriver' because 'GetAndUseAllowAllDriver' is not a known function or type
2014/07/01 15:54:30 skipping example 'ExampleGetAndUseDenyAllDriver' because 'GetAndUseDenyAllDriver' is not a known function or type
2014/07/01 15:54:30 skipping example 'ExampleGetDenyAllDriver' because 'GetDenyAllDriver' is not a known function or type
2014/07/01 15:54:30 skipping example 'ExampleGetRedisDriver' because 'GetRedisDriver' is not a known function or type
^C%
I don't understand, so I cannot make arbitrary names of examples? Do the names have to match function names of my package or of my file? This is in my test package, so I am probably trying to test function in a different package and file. How do I do this?
答案1
得分: 4
godoc对名称非常挑剔,你的Example函数名字需要与实际的函数名、类型名或其他相关。请参考http://golang.org/pkg/testing/#hdr-Examples。
以下是一个godoc示例:https://godoc.org/github.com/creack/multio#example-Multiplexer--ReadWriter,代码:https://github.com/creack/multio/blob/master/example_test.go
你会注意到,Example被称为ExampleMultiplexer_simple
和ExampleMultiplexer_readWriter
。这是因为我想要两个示例,我本可以只使用ExampleMultiplexer
。这样做是因为我有一个叫做(确切地说)Multiplexer
的类型。如果你有一个函数,你也可以这样做,但是名字必须匹配。
当使用后缀时,后缀的首字母必须是小写,否则godoc会将其丢弃。
所以回答你的问题:是的,你可以使用任意名称,但是你仍然需要遵循godoc的样式,即ExampleTypeName_suffix
(后缀的首字母小写)。
英文:
godoc is very picky regarding the names, your Example function name needs to correlate with an actual function name, type name or other. See http://golang.org/pkg/testing/#hdr-Examples for reference.
Example of godoc exmaple: https://godoc.org/github.com/creack/multio#example-Multiplexer--ReadWriter, code: https://github.com/creack/multio/blob/master/example_test.go
You will notice, that the Example are called ExampleMultiplexer_simple
ExampleMultiplexer_readWriter
. This is because I wanted two example, I could have simply use ExampleMultiplexer
. This works because I have a type called (exactly) Multiplexer
. If you have a function, you can do the same, but the name needs to match.
When using a suffixe, it is very important that the suffix begins with a lowercase, otherwise godoc will discard it.
So to answer your question: yes you can use arbitrary name, but you still need to follow the godoc style of ExampleTypeName_suffix
(lower case suffix first letter)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论