Home  >  Article  >  Backend Development  >  Golang - Package name is double underscore

Golang - Package name is double underscore

WBOY
WBOYforward
2024-02-09 15:00:12926browse

Golang - 包名称为双下划线

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.

Question content

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.

Solution

Yes, that means the same directory. Let's take a look at the code below.

Directory Structure

.
├── go.mod
├── greet
│   └── greet.go
└── main.go
Content in

greet.go

package __

import "fmt"

func hello(name string) {
    fmt.printf("hello %s\n", name)
}
Contents in

main.go

package main

import greet "playground/greet"

func main() {
    greet.hello("eric")
}

Current directory

$ 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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete