golang类型别名与自定义类型
类型别名
类型别名规定:Type Alias只是Type 的别名,本质上Type Alias 与Type是同一个类型,即基本数据类型是一致的。好比如我们小时家里人给我们起的小名,上学后英语老师给起的英文名字,但是这个名字都是指的我们自己。
语法:type type_alias = Type
类型别名实际上是一样的,类型之间可以互相赋值,
type myInt = int
func main() {
var int1 int = 10
var int2 myInt = 20
fmt.Println(reflect.TypeOf(int1)) // int
fmt.Println(reflect.TypeOf(int2)) // int
fmt.Println(int1, int2) // 10 20
int2 = int1
fmt.Println(int1, int2) // 10 10
}
自定义类型
自定义类型是依据基本类型声明一个新的数据类型。
自定义类型不能直接和原类型进行互相赋值,会编译报错,但是可以通过强制类型转换来进行赋值
type myInt int
func main() {
var int1 int = 10
var int2 myInt = 20
fmt.Println(reflect.TypeOf(int1)) // int
fmt.Println(reflect.TypeOf(int2)) // main.myInt
fmt.Println(int1, int2) // 10 20
// int2 = int1 // 编译报错 cannot use int1 (variable of type int) as myInt value in assignment
// 可以通过类型转换来进行赋值
var int3 myInt
int3 = myInt(int1)
fmt.Println(int3)
}
从上面的结果我们可以看出,int2 的类型是 main.myInt,表示main 包下定义的myInt 类型。生成了新的数据类型。
我们应该尽量避免使用自定义类型,实际上类型别名已经足够满足我们的开发需求了,比如json相关的操作中,经常用到map[string]interface {}
这种类型,写起来很繁琐,没关系,给它起个简单的别名,这样就很方便了。
type strMap2Any = map[string]interface {}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com