go - 用于文档目的的类型别名
问题描述
使用类型别名使 Go 代码更具自我记录性是否被认为是一种好习惯?一个例子:
type User struct {
// user stuff
}
type Username = string
func Foo(users map[Username]User){
// do stuff
}
很明显, Foo 需要从用户名到用户结构的映射,而无需在注释中解释任何内容,如果类型定义是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
,这不是别名,但纯粹从文档的角度来看,我认为效果是相似的。
解决方案
无论如何,别名声明都不会创建与创建它的类型不同的新的不同类型。它只是为 T2 表示的类型引入了一个别名 T1,一种替代拼写。
类型别名不适合日常使用。引入它们是为了支持逐步代码修复,同时在大规模重构期间在包之间移动类型。代码库重构(在 Go 的帮助下)详细介绍了这一点。
查看此提案以获取更多信息
推荐阅读
- python - 在excel中通过vba调用python程序时,有没有办法引用活动工作簿?
- javascript - jQuery .css - z-index 未应用于元素
- linux - 如何杀死 dockerd -h fd// 进程?
- tensorflow - 如何在张量中使用字符串类别作为特征?(如果可能在 tensorflow js 中)
- python - 如何在文件中重新子模式
- c# - Entity Framework Core - 更新嵌套实体
- python - sys.modules[__name__] = _classname()。它实际上是做什么的?
- google-colaboratory - 有没有人在 colab 上安装 ludwig 时遇到过同样的错误?
- python - 在我的网格布局中绘制到许多坐标系,然后使用 seaborn 和 mathplotlib 绘制
- excel - 如何从Excel中的数字中获取第一个有效数字?