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 语言中原先不存在的数据类型。