1. 程式人生 > GO語言入門 >30 Go 語言拓展以有型別

30 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 語言中原先不存在的資料型別