【问题标题】:idiomatic Go name for struct in package?包中结构的惯用 Go 名称?
【发布时间】:2018-04-24 13:52:33
【问题描述】:

我有一个名为“foo”的包,因为它定义了一个 Foo 结构和相关的东西,比如方法。

该包有一个 New 方法,该方法返回一个堆分配的 Foo 结构。

当包名称为“foo”时,可以将结构类型命名为 Foo 吗?我不确定,因为它会口吃。

var f foo.Foo

另一方面,写作感觉很自然

f := foo.New(...)

【问题讨论】:

    标签: go idioms


    【解决方案1】:

    没关系,也很地道。

    标准库中的类似示例:

    另外,我猜foo.Foo 只是一个示例,但是对于您的实际类型名称,您也可以在类型名称中使用简化,这正是因为包已经描述了它。例如标准库中有一个http.CookieJar接口,有一个net/http/cookiejar包提供了一个实现http.CookieJar的类型,它被命名为cookiejar.Jar,而不是cookiejar.CookieJar

    所以只需使用常识并从包用户的角度(从他们的角度)来看待它。 foo.Foo 非常好。但是上面的类似示例是包含许多其他类型的包的一部分。如果这是您的包将导出的唯一类型,则根据使用情况,foo.F 也可能是明智和可接受的。例如,bson.Mbson.D 类型被故意缩短,因为它们经常甚至多次用于创建 MongoDB 查询。鉴于上下文,它们是什么很清楚,不会造成麻烦或误解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 2015-05-22
      • 2011-10-04
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多