【发布时间】:2020-11-28 14:40:00
【问题描述】:
使用类型别名来使 Go 代码更具自我记录性是否被认为是一种好习惯?一个例子:
type User struct {
// user stuff
}
type Username = string
func Foo(users map[Username]User){
// do stuff
}
很明显,Foo 需要一个从用户名到用户结构的映射,而不需要在 cmets 中解释任何内容,如果类型定义为 map[string]User,则可能需要这种方法。这种方法有什么负面影响吗?
函数参数类似于局部变量,但它们也用作 文档。
类型是描述性的,它们应该是简短的:
func AfterFunc(d Duration, f func()) *Timer
func Escape(w io.Writer, s []byte)
类型比较模糊的地方, 这些名称可能会提供文档:
func Unix(sec, nsec int64) 时间
func HasPrefix(s, prefix []byte) bool
引自https://talks.golang.org/2014/names.slide#9。使类型不那么模棱两可似乎是一个有价值的目标。 time.Duration 就是简单的type Duration int64,不是别名,只是单纯从文档的角度来说我觉得效果差不多。
【问题讨论】:
-
它不会比评论
// Username提供更多的好处,这也不会被认为很有帮助。为您的地图声明一个实际类型并记录下来会更容易接受。 -
@JimB 之类的
type Users map[string]User带有有用的文档字符串?我同意我的示例中的名称不是很好,但这在某种程度上是提出最简单示例的副作用。 -
函数声明的读者必须了解
Username是什么才能理解函数。说明用户是由用户名键入的地图的功能文档注释更好。一切都包含在为函数显示的文档中。
标签: go type-alias