golang的类型再定义和类型别名

类型再定义:

type A int32

类型别名:

type A = int32

1,类型再定义的使用

类型再定义,一般用在为一个类型添加一个独有的方法使用。再定义的类型,和原类型的方法,不再有交集。
以我们的http包为例:

package http

type HandlerFunc func(w ResponseWriter, r *Request)

func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

2,类型别名的使用

类型别名,和原类型完全一样,原类型的方法,别名类型也可以使用。
golang中两个内置的类型别名的例子:

type byte = uint8
type rune = int32

类型别名的设计初衷,是为了解决代码重构时,类型在包之间转移时产生的问题。

别名在代码重构中非常有用,例如以前使用的是p.T这个类型,重构过程中需要把它移到p1.T1,
这时只需要在p包中定义type T = p1.T1,这样基本之前使用p.T的代码都不用修改

类型别名的好处:

  • 名字可以起的通俗易懂
  • 需要修改数据类型时,只需要改原类型定义的那个地方。使用的地方都可以不用改动。
  • 可以很方便的添加特有方法,以实现某些接口
  • 当原始类型为不可导出(小写)时,别名类型可以定义成导出(大写)的
type t1 struct { //不可导出
    S string
}
type T2 = t1 //可导出

参考

https://fenggolang.github.io/2018/09/golang%E4%B8%AD%E7%B1%BB%E5%9E%8B%E5%88%AB%E5%90%8D%E4%B8%8E%E7%B1%BB%E5%9E%8B%E5%86%8D%E5%AE%9A%E4%B9%89/