我最近做了一些编程,在尝试遵循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.FooBar与foo.FooBaz地方foo.Bar及foo.Baz将工作一样好.
考虑标准库html/template,它定义了一个type(template.Template)和一个构造函数(template.New).
| 归档时间: |
|
| 查看次数: |
1513 次 |
| 最近记录: |