需要的知識 inte***ce:
x.(t)
檢查x的動態型別是否是t,其中x必須是介面值。
直接使用:
func main()
x = 100
value1, ok := x.(int)
if ok
value2, ok := x.(string)
if ok
}
需要注意如果不接收第二個引數也就是ok,這裡失敗的話則會直接panic,這裡還存在一種情況就是x為nil同樣會panic
func main()
x = "hello"
value := x.(int)
fmt.println(value)
}輸出:panic: inte***ce conversion: inte***ce {} is string, not int
輸出:
若型別檢查成功提取到的值也將擁有對應type的方法:
func main()
a = a{}
value := a.(a)
value.hi()
fmt.println(value.name)
}type a struct
func (a a) string() string
func (a *a) hi()
switch使用:
package main
import "fmt"
func main()
judgetype(a)
a1 := new(a)
judgetype(a1)
}//這裡需要注意case的順序是有意義的因為可能存在乙個值實現多個inte***ce的情況
func judgetype(a inte***ce{})
}type a struct
func (a a) string() string
輸出:
int: 100
string: hello world
型別a: type is a
指標a type is a
golang 型別斷言
型別斷言是乙個使用在介面值上的操作 有時候,我們可能需要知道某個介面型別的實際型別,比如某個方法需要接收多種型別的資料並需做分別處理時,我們可以把形參設為空介面型別以接收任意型別的值,但是我們怎麼反向知道裡面實際儲存了的是哪個型別的物件呢?一種常用的方法是 comma ok 斷言 value,ok ...
golang 型別斷言的學習
在php中有乙個 serialize 函式 可以把陣列序列化成字串進行儲存和傳輸 如果想反序列化這種字串,在php中只需要乙個簡單的unserialize 函式就可以完成了.但是在golang中可就沒有這麼容易了,非得費個九牛二虎之力,寫上不少 才行。這時候只想感嘆一下,php真的是世界上最好的語言...
golang中的型別斷言
golang有型別轉換,型別斷言,型別切換 1.介面型別斷言 型別斷言就是將介面型別的值 x 裝換成型別 t 成功則返回 t 的例項。格式為 x.t 不安全,會造成panic,程式中斷 v x.t 不安全,會造成panic,程式中斷 v,ok x.t 推薦寫法型別斷言的必要條件就是x是介面型別,非介...