类型再定义:
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 //可导出