Go问答 代码设计问题

dbas · 2020年07月07日 · 最后由 dbas 回复于 2020年07月07日 · 1479 次阅读
本帖已被设为精华帖!
type Id []byte

//节点的Id与网络地址信息
type NodeInfo struct {
  Ip       net.IP
  Port     int
  Id       Id
}

问题:为什么很多人的代码 type NodeInfo 中不直接

Id  []byte

有什么好处吗??

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

1、提高可读性,通过类型就能看出来含义 2、通过 type 之后的类型可以自定义函数

如果把 Id 类型改回 [] byte 还能编译通过,说明是过度设计

h12 回复

为什么会是过度设计呢,这样直接把一些函数和类型绑定很方便啊,而且可读性很好

如 #1, #2 所说

type 自定义类型相对于直接使用基础类型是有些考虑点的,如果你觉得这些你都不需要,那么我觉得你就没有必要再定义一个新的类型了

  • 自定义类型后本身的类型命名具有更贴切的可读意义,例如
// 类型可读性
type Color uint

const (
    min Color = iota
    Red
    Blue
    Green
    ...
    max
)

// 参数可读性
func PrintColor(c Color) {
    fmt.Println("this color is %s", c)
}

// 返回值可读性
func MakeColor(i uint) Color {
    c := Color(uint)
    if !c.Valud() {
        panic(fmt.Sprintf("%d is an invalid color value", c))
    }
    return c
}
  • 自定义类型可以扩展自定义方法和重写底层类型的方法等
// 自定义校验
func (c Color) Valud() bool {
    return c > min && c < max
}

// 重写 String
func (c Color) String() string {
    switch c {
    case Red:
        return "Red"
    ...
    }
}
naiveboy 回复

如果。。。说明。。。是对你之前回复的补充,两者不矛盾。

🌹 🌹 🌹 🌹 💐 感谢你们的回复,理解到了。

dbas 关闭了讨论 07月08日 17:49
astaxie 将本帖设为了精华贴 07月09日 09:58
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册