如何避免在包和结构名称中出现口吃?

Jus*_*hms 4 go

我最近做了一些编程,在尝试遵循Effective Go风格指南的同时,我有时发现在命名包和接口以及结构时很难避免出现问题.

举个例子.
我可能有一个带有Console.go文件的控制台包,其中包含Console接口,控制台结构和New函数.

//console/Console.go
package console

type Console interface {
   Print(s String)
}

type console struct {
  ....
}

func (c *console) Print(s String){
  ....
}

func New() Console{
   return &console{}
}
Run Code Online (Sandbox Code Playgroud)

现在,当我在某个地方使用它时,我最终console.Console到处都使用了一种类型.

当我在一个包中有两个或更多结构时,我最终会像这样的东西 con := console.NewConsole()

我不介意有大多数扁平的包结构,但我喜欢尽可能地保持我的代码组织.我对IO.Reader和IO.Writer的想法很好,但是当包与事物相同但仍然需要分开时该怎么办. (是的我知道给定的例子可能是Console.Writer,但让我们假装它完全不同)

所以我的问题是:这种口吃效应是否应该让我担心?(即它是不好的形式?)有没有人有任何避免它的提示?

Adr*_*ian 12

口吃类型名称通常很好 - 拥有a并不罕见foo.Foo,因为包foo专用于定义类型Foo.这绝对没有错.

你想要避免的是不必要的口吃; 这将是类似的事情foo.NewFoo时,简直foo.New是足够精确,或者foo.FooBarfoo.FooBaz地方foo.Barfoo.Baz将工作一样好.

考虑标准库html/template,它定义了一个type(template.Template)和一个构造函数(template.New).

  • 谢谢,我有点认为我想多了。 (2认同)