In Golang programming, package name is a very important concept. The specification for package names is to use lowercase letters and not contain special characters and spaces. However, there is a special case where the package name is double underscored. This is because in Golang, packages with double underscores in their package names have special meaning. It represents an empty package, used to declare variables or perform some special initialization operations. This feature is very useful in some specific scenarios, especially when developing some tools or frameworks. So, if you see a package name with double underscores in Golang, don’t be confused, it is a legal package name with special meaning.
In the go code generated by my protobuf, the package is:
package __
What does double underscore
mean? Is it the same as the folder name?
Is there any documentation on this? I searched but couldn't find it. And the code compiles without errors.
Yes, that means the same directory. Let's take a look at the code below.
. ├── 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
Unfortunately, I can't find any go documentation either.
However, this seems to be a good thing. You don't really need to name the package. You just name the directory and the package names will automatically be the same.
Note: This is definitely not grpc
or protobuf
stuff. However, as a rule, if you generated the original stub from the original file, and added some additional utility files, you can put them into a directory and then import it directly by the directory name. For example the following github repository
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
The above is the detailed content of Golang - Package name is double underscore. For more information, please follow other related articles on the PHP Chinese website!