Go 語言拓展以有類型
在開發中,僅僅使用 Go 語言自帶的變量是無法滿足我們的業務需求的,就算勉強能滿足,對我們整個項目代碼后期的維護和其可讀性,都會帶來很大的不便。所以幾乎所有語言都支持自定義數據類型,用于拓展已有的數據類型來適應日新月異的開發場景。在 Go 語言中可以使用?type?關鍵字自定義數據類型。
1. 自定義復雜類型
我們可以使用type Name Type
去自定義一個全新的數據類型。這個類型的變量就使用Name
來聲明。通常type用于將一個復雜的數據類型定義為一個全新的數據類型,便于后續使用。
代碼示例
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ? ? ?
"fmt"
- 5? ? ? ? ?
"reflect"
- 6?
)
- 7
- 8?
type stringList []string
- 9
- 10?
func main() {
- 11? ? ? ?
strList := stringList{"test1", "test2"}
- 12? ? ? ?
fmt.Println("strList的數據類型:", reflect.TypeOf(strList))
- 13? ? ? ?
fmt.Println("strList的值:", reflect.ValueOf(strList))
- 14?
}
- 第 8 行:自定義一個數據類型,這個數據類型為字符串切片,命名為 stringList;
- 第 11 行:給變量 strList 定義為 stringList 類型并賦值;
- 第 12 行:打印 strList 的數據類型;
- 第 13 行:打印 strList 的值。
執行結果:
2. 別名
type關鍵字還有一種用法,就是以已經存在的數據類型進行類型自定義,這種用法就叫做別名。顧名思義,就是給已經存在的數據類型起一個新名字。常用于使用常量來開發枚舉功能時,也是前文在介紹使用常量代替枚舉時的使用方式。
代碼示例
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ? ? ?
"fmt"
- 5?
)
- 6
- 7?
type Grade int
- 8
- 9?
const (
- 10? ? ? ?
FirstGrade Grade = iota
- 11? ? ? ?
SecondGrade
- 12? ? ? ?
ThirdGrade
- 13? ? ? ?
FourthGrade
- 14? ? ? ?
FifthGrade
- 15? ? ? ?
SixthGrade
- 16?
)
- 17
- 18?
func main() {
- 19? ? ? ?
fmt.Println("FirstGrade :", FirstGrade)
- 20? ? ? ?
fmt.Println("SecondGrade:", SecondGrade)
- 21? ? ? ?
fmt.Println("ThirdGrade :", ThirdGrade)
- 22? ? ? ?
fmt.Println("FourthGrade:", FourthGrade)
- 23? ? ? ?
fmt.Println("FifthGrade :", FifthGrade)
- 24? ? ? ?
fmt.Println("SixthGrade :", SixthGrade)
- 25?
}
- 第 7 行:給int類型定義一個名為 Grade 的別名。
執行結果:
3. 小結
本文主要介紹了自定義類型?type?關鍵字的兩個用法:自定義復雜類型和別名。其實這兩種用法的特性就是一致的,就是使用?type?關鍵字,在 Go 語言中定義了一種 Go 語言中原先不存在的數據類型。
文章來源于網絡,侵刪!