在Golang编程中,包名是一个非常重要的概念。包名的规范是使用小写字母,并且不包含特殊字符和空格。然而,有一个特殊的情况是包名称为双下划线。这是因为在Golang中,包名为双下划线的包具有特殊的含义。它表示一个空包,用于声明变量或执行一些特殊的初始化操作。这个特性在一些特定的场景下非常有用,尤其是在开发一些工具或框架时。所以,如果你在Golang中看到包名称为双下划线的情况,不要感到困惑,它是一种合法且有特殊含义的包名。
问题内容
在我的protobuf生成的go代码中,包是:
package __
双下划线
是什么意思,和文件夹名意思一样吗?
有没有这方面的文档,我搜索过,但没有找到。并且代码可以编译,没有错误。
解决方法
是的,这意味着同一目录。让我们看一下下面的代码。
目录结构
.
├── go.mod
├── greet
│ └── greet.go
└── main.go
greet.go
中的内容
package __
import "fmt"
func hello(name string) {
fmt.printf("hello %s\n", name)
}
main.go
中的内容
package main
import greet "playground/greet"
func main() {
greet.hello("eric")
}
当前目录
$ pwd
/Users/thedatageek/Codes/go-playground
不幸的是,我也找不到任何 go 文档。
不过,这似乎是件好事。您确实不需要为包命名。您只需命名目录,包名称就会自动相同。
注意:这绝对不是 grpc
或 protobuf
的东西。然而,习惯上,如果您从原始文件生成了原始存根,并且添加了一些附加实用程序文件,则可以将它们放入目录中,然后通过目录名称直接导入它。例如以下 github 存储库
https://www.php.cn/link/570badcfe14697bf2a244e2e25b93e59 https://www.php.cn/link/11b01bd09f8d22fecc14d3418f83caab https://www.php.cn/link/8cee1a0fe765af425dc6f0b6169a6c07 https://www.php.cn/link/8230bea7d54bcdf99cdfe85cb07313d5 https://www.php.cn/link/05f03bcccda955d1689b36046a6db899 https://www.php.cn/link/3a93a609b97ec0ab0ff5539eb79ef33a
以上就是Golang - 包名称为双下划线的详细内容,更多请关注编程网其它相关文章!