Go語言之Go 語言型別別名

2022-09-07 07:51:14 字數 2101 閱讀 1656

在 go 1.9 版本之前定義內建型別的**是這樣寫的:

type byte uint8

type rune int32

而在 go 1.9 版本之後變為:

type byte = uint8

type rune = int32

這個修改就是配合型別別名而進行的修改。

定義型別別名的寫法:

type typealias = type
型別別名規定:typealias 只是 type 的別名,本質上 typealias 與 type 是同乙個型別.

型別別名與型別定義表面上看只有乙個等號的差異,那麼它們之間實際的區別有哪些呢?

package main

import "fmt"

// 將newint 定義為int型別

type newint int

// 將int 取別名叫intalias

type intalias = int

func main()

結果:

a type: main.newint

b type: int

分析:

1、newint 定義為 int 型別,這是常見的定義型別的方法,通過 type 關鍵字的定義,newint 會形成一種新的型別,newint 本身依然具備 int 型別的特性。

2、將 intalias 設定為 int 的乙個別名,使用 intalias 與 int 等效。

3、將 a 宣告為 newint 型別,此時若列印,則 a 的值為 0

4、將 b 宣告為 intalias 型別,此時列印 b 的值為 0。

結果顯示 a 的型別是 main.newint,表示 main 包下定義的 newint 型別 b 型別是 int,intalias 型別只會在**中存在,編譯完成時,不會有 intalias 型別

package main

import (

"time"

)// 定義time.duration的別名為myduration

type myduration = time.duration

// 為myduration新增乙個函式

func (m myduration) easyset(a string)

func main()

time.duration 設定乙個型別別名叫 myduration

為這個別名新增乙個方法。

編譯上面**報錯,資訊如下:

cannot define new methods on non-local type time.duration

解決這個問題有下面兩種方法:

package main

import (

"fmt"

"reflect"

)// 定義商標結構

type brand struct

// 為商標結構新增show()方法

func (t brand) show()

// 為brand定義乙個別名fakebrand

type fakebrand = brand

// 定義車輛結構

type vehicle struct

func main()

}

fieldname: fakebrand, fieldtype: brand

fieldname: brand, fieldtype: brand

這個例子中,fakebrand 是 brand 的乙個別名,在 vehicle 中嵌入 fakebrand 和 brand 並不意味著嵌入兩個 brand,fakebrand 的型別會以名字的方式保留在 vehicle 的成員中。

a.show()

編譯器將發生報錯:

ambiguous selector a.show

在呼叫 show() 方法時,因為兩個型別都有 show() 方法,會發生歧義,證明 fakebrand 的本質確實是 brand 型別。

Go語言之GO 語言常量

相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...

Go語言之嵌入型別

嵌入型別,或者巢狀型別,這是一種可以把已有的型別宣告在新的型別裡的一種方式,這種功能對 復用非常重要。在其他語言中,有繼承可以做同樣的事情,但是在go語言中,沒有繼承的概念。go提倡的 復用的方式是組合,所以這也是嵌入型別的意義所在。組合而不是繼承,所以go才會更靈活。type reader int...

Go語言之Go語言網路程式設計

go語言的 net 包中有乙個 tcpconn 型別,可以用來建立 tcp 客戶端和 tcp 伺服器端間的通訊通道,tcpconn 型別裡有兩個主要的函式 func c tcpconn write b byte n int,err os.error func c tcpconn read b byt...