Go 语言拓展以有类型

在开发中,仅仅使用 Go 语言自带的变量是无法满足我们的业务需求的,就算勉强能满足,对我们整个项目代码后期的维护和其可读性,都会带来很大的不便。所以几乎所有语言都支持自定义数据类型,用于拓展已有的数据类型来适应日新月异的开发场景。在 Go 语言中可以使用 type 关键字自定义数据类型。

1. 自定义复杂类型

我们可以使用type Name Type去自定义一个全新的数据类型。这个类型的变量就使用Name来声明。通常type用于将一个复杂的数据类型定义为一个全新的数据类型,便于后续使用。

代码示例

package main

import (
    "fmt"
    "reflect"
)

type stringList []string

func main() {
    strList := stringList{"test1", "test2"}
    fmt.Println("strList的数据类型:", reflect.TypeOf(strList))
    fmt.Println("strList的值:", reflect.ValueOf(strList))
}
  • 第 8 行:自定义一个数据类型,这个数据类型为字符串切片,命名为 stringList;
  • 第 11 行:给变量 strList 定义为 stringList 类型并赋值;
  • 第 12 行:打印 strList 的数据类型;
  • 第 13 行:打印 strList 的值。

执行结果:

图片描述

2. 别名

type关键字还有一种用法,就是以已经存在的数据类型进行类型自定义,这种用法就叫做别名。顾名思义,就是给已经存在的数据类型起一个新名字。常用于使用常量来开发枚举功能时,也是前文在介绍使用常量代替枚举时的使用方式。

代码示例

package main

import (
    "fmt"
)

type Grade int

const (
    FirstGrade Grade = iota
    SecondGrade
    ThirdGrade
    FourthGrade
    FifthGrade
    SixthGrade
)

func main() {
    fmt.Println("FirstGrade :", FirstGrade)
    fmt.Println("SecondGrade:", SecondGrade)
    fmt.Println("ThirdGrade :", ThirdGrade)
    fmt.Println("FourthGrade:", FourthGrade)
    fmt.Println("FifthGrade :", FifthGrade)
    fmt.Println("SixthGrade :", SixthGrade)
}
  • 第 7 行:给int类型定义一个名为 Grade 的别名。

执行结果:

图片描述

3. 小结

本文主要介绍了自定义类型 type 关键字的两个用法:自定义复杂类型别名。其实这两种用法的特性就是一致的,就是使用 type 关键字,在 Go 语言中定义了一种 Go 语言中原先不存在的数据类型