Golang 之區分型別別名(Type Alias)與型別定義(Type define)
- 一、型別別名(Type Alias)、型別定義是什么?
- 二、區分型別別名與型別定義
- 型別定義
- 型別別名
- 型別定義
- 區分型別別名、型別定義
- 非本地型別不能定義方法
一、型別別名(Type Alias)、型別定義是什么?
型別別名 是 Go 1.9 版本添加的新功能,主要應用于代碼升級、工程重構、遷移中型別的兼容性問題,C/C++ 語言中,代碼的重構升級可以使用宏快速定義新的代碼,Go 語言中并未選擇通過宏,而是選擇通過型別別名解決重構中最復雜的型別名變更問題,
- 在 Go 1.9 版本之前內建型別定義的代碼如下:
-
type byte uint8 type rune int32 - 在Go 1.9 版本之后內建型別定義的代碼如下:
-
通過以上可以看出這個修改就是配合型別別名進行修改的,type byte = uint8 type rune = int32
二、區分型別別名與型別定義
- 型別別名規定:Type Alias只是Type 的別名,本質上Type Alias 與Type是同一個型別,即基本資料型別是一致的,好比如我們小時家里人給我們起的小名,上學后英語老師給起的英文名字,但是這個名字都是指的我們自己,
- 表面上看型別別名與型別定義只有一個等號的差異("="),實際上的差異我們通過一段簡短的代碼更為深刻的理解二者之間的差異,如下代碼所示;
package main
import "fmt"
// 自定義型別myInt,基本型別是int
type myInt int
//將 int 型別取一個別名intAlias
type intAlias = int
func main() {
//宣告 a變數為自定義 myInt 型別
var a myInt
// 輸出 a 的型別 和默認值
fmt.Printf("a Type: %T, value: %d\n", a, a)
//宣告 b變數為 intAlias 型別
var b intAlias
// 輸出 b 的型別 和默認值
fmt.Printf("b Type: %T, value: %d\n", b, b)
}
== 輸出結果 ==:
a Type: main.myInt, value: 0
b Type: int, value: 0
- 從上面的結果我們可以看出,a 的型別是 main.myInt,表示main 包下定義的myInt 型別,生成了新的資料型別,
- b 的型別是 int ,intAlias 型別只會在代碼中存在,編譯完成時,不會有 intAlias 型別,
型別定義
型別定義:依據基本型別宣告一個新的資料型別,
// 新宣告一個變數c intAlias 型別
var c intAlias
c = a
fmt.Printf("c Type: %T, value: %d\n", c, c)
OutPut Result:
cannot use a (type myInt) as type int in assignment
從以上可以看出,變數 a 和 c 不是同一個型別,因此不能直接賦值;可以通過強制型別轉換,實作 修改為 c=int(a),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/18952.html
標籤:其他
下一篇:Timer定時器用法詳解
