golang类型别名与类型定义

  1. golang类型别名与自定义类型
    1. 类型别名
    2. 自定义类型

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