講述了go語言中 type swith 的用法以及獲取對應變數的一些特殊情況。
type switch 是 go 語言中一種特殊的 switch 語句,它比較的是型別而不是具體的值。它判斷某個介面變數的型別,然後根據具體型別再做相應處理。注意,在 type switch 語句的 case 子句中不能使用fallthrough
。
它的用法如下。
switch x.(type)
其中,x
必須是乙個介面型別的變數,而所有的case
語句後面跟的型別必須實現了x
的介面型別。
為了便於理解,我們可以結合下面這個例子來看:
package main
import (
"fmt"
"reflect"
)type animal inte***ce
type dog struct {}
func (self dog) shout() string
type cat struct {}
func (self cat) shout() string
func main()
switch animal.(type)
}
在上面的例子中,cat
和dog
型別都實現了介面animal
,所以它們可以跟在case
語句後面,判斷介面變數animal
是否是對應的型別。
如果我們不僅想要判斷某個介面變數的型別,還想要獲得其型別轉換後的值的話,我們可以在 switch 的語句表示式中宣告乙個變數來獲得這個值。
其用法如下所示:
package main
import (
"fmt"
"reflect"
)type animal inte***ce
type dog struct
func (self dog) shout() string
type cat struct
func (self cat) shout() string
type tiger struct
func (self tiger) shout() string
func main()
// var animal animal // 驗證 case nil
// var animal animal = wolf{} // 驗證 default
var animal animal = dog{}
switch a := animal.(type)
// fmt.println(a.name) 這裡會報錯,因為 animal 型別沒有成員name
case tiger: // a的型別是 tiger
fmt.println(a.shout(), a.name) // 這裡可以直接取出 name 成員
default: // a的型別是 animal
fmt.println("default", reflect.typeof(a), a)
}}
在上述**中,我們可以看到a := animal.(type)
語句隱式地為每個case
子句宣告了乙個變數a
。
變數a
型別的判定規則如下:
為了更好地理解上述規則,我們可以用if
語句和型別斷言來重寫這個switch
語句,如下所示:
v := animal // animal 只會被求值一次
if v == nil else
if a, istiger := v.(tiger); istiger else else
}
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...
Go 初學Go語言
馬上要去實習了,要開始實戰了 今天在這總結一些基礎用法,方便後面自己查閱 總結的參考資料為go by example,一邊複習一邊記錄 go by example var a string initial var b,c int 1 2 一次宣告多個 var d true 自動推斷型別 var e ...
五 go語言特性 go語言筆記
defer 呼叫乙個被 defer 的函式時在函式剛要返回之前延遲執行,當函式無論怎樣返回,某資源必須釋放時,可用這種與眾不同 但有效的處理方式。傳統的例子包括解鎖互斥或關閉檔案。package main import log func main mydefer func mydefer func ...