Go 語言拓展以有類型
在開發(fā)中,僅僅使用 Go 語言自帶的變量是無法滿足我們的業(yè)務(wù)需求的,就算勉強(qiáng)能滿足,對(duì)我們整個(gè)項(xiàng)目代碼后期的維護(hù)和其可讀性,都會(huì)帶來很大的不便。所以幾乎所有語言都支持自定義數(shù)據(jù)類型,用于拓展已有的數(shù)據(jù)類型來適應(yīng)日新月異的開發(fā)場景。在 Go 語言中可以使用 type 關(guān)鍵字自定義數(shù)據(jù)類型。
1. 自定義復(fù)雜類型
我們可以使用type Name Type
去自定義一個(gè)全新的數(shù)據(jù)類型。這個(gè)類型的變量就使用Name
來聲明。通常type用于將一個(gè)復(fù)雜的數(shù)據(jù)類型定義為一個(gè)全新的數(shù)據(jù)類型,便于后續(xù)使用。
代碼示例
package main
import (
"fmt"
"reflect"
)
type stringList []string
func main() {
strList := stringList{"test1", "test2"}
fmt.Println("strList的數(shù)據(jù)類型:", reflect.TypeOf(strList))
fmt.Println("strList的值:", reflect.ValueOf(strList))
}
- 第 8 行:自定義一個(gè)數(shù)據(jù)類型,這個(gè)數(shù)據(jù)類型為字符串切片,命名為 stringList;
- 第 11 行:給變量 strList 定義為 stringList 類型并賦值;
- 第 12 行:打印 strList 的數(shù)據(jù)類型;
- 第 13 行:打印 strList 的值。
執(zhí)行結(jié)果:
2. 別名
type關(guān)鍵字還有一種用法,就是以已經(jīng)存在的數(shù)據(jù)類型進(jìn)行類型自定義,這種用法就叫做別名。顧名思義,就是給已經(jīng)存在的數(shù)據(jù)類型起一個(gè)新名字。常用于使用常量來開發(fā)枚舉功能時(shí),也是前文在介紹使用常量代替枚舉時(shí)的使用方式。
代碼示例
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類型定義一個(gè)名為 Grade 的別名。
執(zhí)行結(jié)果:
3. 小結(jié)
本文主要介紹了自定義類型 type 關(guān)鍵字的兩個(gè)用法:自定義復(fù)雜類型和別名。其實(shí)這兩種用法的特性就是一致的,就是使用 type 關(guān)鍵字,在 Go 語言中定義了一種 Go 語言中原先不存在的數(shù)據(jù)類型。