我在代码中偶然发现了这种类型别名:type LightSource = struct { R, G, B, L float32 X, Y, Z, A float32 //...}我的问题是:使用这样的类型别名来定义 astruct而不是这样做的原因是什么?type LightSource struct { R, G, B, L float32 //...etc}
3 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
我发现类型别名对可读性很有用。例如,在测试中,您可能会像这样比较 JSON 解码器的输出:
reflect.DeepEqual(r, map[string]interface{}{"a": map[string]interface{}{"b": 42.0}})
但您可以使用类型别名来提高可读性:
type JsonObject = map[string]interface{} ... reflect.DeepEqual(r, JsonObject{"a": JsonObject{"b": 42.0}})
因为 DeepEqual 使用反射来比较类型(和值),所以使类型别名成为类型定义(通过删除 = 字符)将导致 DeepEqual 失败。
当年话下
TA贡献1890条经验 获得超9个赞
为了补充 Rob64 的回答,他指出最终结果是相同的,但不要误会您最终会得到两种不同类型的事实。
type LightSource = struct { // Type struct
R, G, B, L float32
X, Y, Z, A float32
//...
}
type LightSource struct { // Type LightSource
R, G, B, L float32
//...etc
}
我觉得你最终会得到不同的类型这一事实有很多困惑,这意味着如果你在代码中的某个地方强制执行类型 A,并且你使用错误的类型别名方式,你将结束对您的“类型别名”绝对零限制;如果您最终创建了类型别名,最终目标实际上是区分您的类型,但如果您犯了这个错误,那显然是无效的。
- 3 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消