Golang - 双下划线形式的包名

标签 go

在我的 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 文档。

不过好像还挺不错的。您真的不需要为包命名。您只需命名目录,包名称将自动相同。

注意:这绝对不是grpcprotobuf 的事情。然而,如果您已经从原型(prototype)文件生成了原型(prototype) stub ,并且如果您添加了一些额外的实用程序文件,您可以将它们放入一个目录中,然后通过目录名直接导入它,这是一种习惯。例如下面的 github repos

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

关于Golang - 双下划线形式的包名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74579996/

相关文章:

mongodb - 更新mongodb并返回已完全更改的内容?

sql - 无法将日期时间纪元转换为仅日期纪元格式

google-app-engine - 如何查询具有其祖先未知的键的实体?

go - 虽然设置了 GOPATH,但 echo $GOPATH 什么都不返回

在 Raspberry Pi4 上下载 Go Mod

google-app-engine - 使用 Go 的 App 脚本 appengine 教程

go - 获取 go 模块问题

http - 向 Struct 添加一些日期,然后将其放入 go 模板中

go - 使用 "var"声明一个新的结构实例与在 Go 中使用 "new"有何不同?

go - 迭代结构并执行数据库查询