在 Go 中,类型名称是否大写?

在我见过的大多数 Go 程序中,即使是只有一个包的程序,类型的名称也是用大写字母书写的,这使得它们可以导出。

这只是为了明确它们是类型的约定,还是需要导出所有类型?

最初我打算在这里放置导出类型的示例,但是环顾一些流行的 Go 项目,我到目前为止只发现了导出类型。因此,在相当大的 Go 项目中任何未导出类型的示例都将受到欢迎。


宝慕林4294392
浏览 359回答 3
3回答

jeck猫

以大写字母开头的类型被导出到其他包。以小写字母开头的只能在包装内使用。重要提示:可以导出接口而不导出实现它的结构。导出类型不是惯例。仅当您允许它们在包外使用时才导出它们。在您提供的示例中,不需要导出Server类型,因为它没有导出的字段或方法。仅导出属于与客户的合同的一部分的类型。导出仅在内部使用的类型是一个错误,并且在文档中令人困惑。编辑:关于Server类型的一点说明。它实现了http.Handler接口(必须定义ServeHTTP(http.ResponseWriter, *http.Request)),因此可以使其不导出并使用接口作为NewServer函数的返回类型。

千巷猫影

类型可以是私有的。然而,让一个公共函数返回一个私有类型是行不通的。只要该类型仅在内部使用包,我将其保密。编辑:在您的示例中,服务器必须是公共的,因为它由公共函数返回,因此在包外使用。函数 NewServer 返回 *Server。编辑新示例:在新示例中,这是主包。反正也不能导入。

至尊宝的传说

这不是约定俗成的问题,Go 实际上使用大小写来确定导出哪些内容,即在导入包时可用。例如,如果我有:package aconst Exported = "hi"const nonExported = "mom"然后在不同的包中,您可以导入a.Exported但不能a.nonExported:package mainimport "PATH/a"func main() {  println(a.Exported)  // this won't compile  // println(a.nonExported)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go