Golang 型別斷言

2021-09-24 11:32:11 字數 1177 閱讀 2291

需要的知識 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是介面型別,非介...