为什么需要自定义类型
go
不像 Java/C#
那样是面向对象的编程语言,它有自己独特的设计方式,自定义类型就属于其中之一,可以使代码更易于理解。
使用自定义类型可以在原始类型定义的包之外,创建新的类型,来实现自己所需要的方法。 注意:不能在原始类型所在的包外定义原始类型的方法。
package myInt
type MyInt int
// 自定义类型,可以在int包外创建如下方法:
func (m MyInt) Println() {
fmt.Println(m)
}
// 这种方式是不行的
func (m int) Println() {
fmt.Println(m)
}
// 当然,我们也可以通过将原始类型传给函数,来达到相同的目的
func Println(m int) {
fmt.Println(m)
}
声明
type 自定义类型 原始类型
例子:
type MyInt int
type MyIntSon MyInt
实际使用场景
- 通常在和c交互的时候,cgo中用的比较多,举个例子:
type IPortableDevice C.IPortableDevice
- 在引用第三方包,并且希望为其中的原始类型添加方法或者隐藏原始类型方法的时候
type MyInt int 和 type MyInt = int 的区别
type MyInt int
自定义类型,可以在int包外创建如下方法:
func (m MyInt) Println() {
fmt.Println(m)
}
type MyInt1 = int
// 编译不通过
func (m MyInt1) Println() {
fmt.Println(m)
}
这个就相当于是int,不能在int包外定义方法。目前还没发现哪里用到了这种定义方式。
简单的小例子
package main
import (
"fmt"
)
type app []string
func main() {
data := app{"英雄联盟", "王者荣耀", "小垃圾"}
data.Print()
}
func (data app) Print() {
for _, v := range data {
fmt.Println(v)
}
}
所想要表述的意思就是:使用自定义类型,可以使我们的代码可读性更好,更易于扩展,代码结构更为清晰。