在Go中,大写类型名称的惯例是什么?

And*_*eKR 4 go

在我看过的大多数Go程序中,即使只有一个包的程序,类型的名称也用大写字母书写,这使得它们被导出.(例)

这只是一个公约,以明确它们是类型还是需要导出所有类型?

这里有些例子:

  • outyet
    (这是我错误添加的:NewServer()返回a Server,因此需要导出.)
  • 模板

T. *_*rie 6

以大写字母开头的类型将导出到其他包.以小写字母开头的那些只能在包内使用.重要说明:可以导出接口而不导出实现它的结构.

导出类型不是惯例.只有在允许它们在包装外使用时才导出它们.在您提供的示例中,无需导出Server类型,因为它没有导出的字段或方法.

仅导出与客户端签订合同一部分的类型.导出仅在内部使用的类型是错误的,并且在文档中令人困惑.

编辑:

关于Server类型的一点澄清.它实现了http.Handler接口(必须定义ServeHTTP(http.ResponseWriter, *http.Request)),因此可以使其不被导出并使用接口作为NewServer函数的返回类型.


Teh*_*inX 3

类型可以是私有的。

然而,让公共函数返回私有类型是行不通的。只要该类型仅在内部使用包,我就将其保留为私有。

编辑:在您的示例中,服务器必须是公共的,因为它是由公共函数返回的,因此在包外部使用。函数 NewServer 返回 *Server。

编辑新示例:

在新示例中,这是主包。无论如何都无法导入。