Golang - 包名称为双下划线

Eri*_*ang 7 go

在我的 protobuf 生成的 go 代码中,包是:

package __
Run Code Online (Sandbox Code Playgroud)

是什么double underscore意思,与文件夹名称意思相同吗?

有没有这方面的文档,我搜索过,但没有找到。并且代码可以编译,没有错误。

May*_*kar 4

是的,这意味着同一目录。让我们看一下下面的代码。

\n

目录结构

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 greet\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 greet.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n
Run Code Online (Sandbox Code Playgroud)\n

内容在greet.go

\n
package __\n\nimport "fmt"\n\nfunc Hello(name string) {\n    fmt.Printf("Hello %s\\n", name)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

内容在main.go

\n
package main\n\nimport greet "playground/greet"\n\nfunc main() {\n    greet.Hello("Eric")\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当前目录

\n
$ pwd\n/Users/thedatageek/Codes/go-playground\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是我也找不到任何 go 文档。

\n

但似乎这也是一件好事。您确实不需要为包命名。您只需命名目录,包名称就会自动相同。

\n

注意:这绝对不是那个grpc或那个protobuf东西。然而,习惯上,如果您从原始文件生成了原始存根,并且添加了一些附加实用程序文件,则可以将它们放入目录中,然后通过目录名称直接导入它。例如以下 github 存储库

\n

https://github.com/Ash110/gRPC-Logger \n https://github.com/dist1ll/cache-prototype \n https://github.com/kamensotirov99/int-gateway \n https://github .com/rachaelyychen/go-gee \n https://github.com/suvvm/ToadOCREngine \n https://github.com/denyami/drawing-api

\n