golang如何用type-switch判斷interface變量的實(shí)際存儲(chǔ)類(lèi)型
用type-switch判斷interface的實(shí)際存儲(chǔ)類(lèi)型
在go語(yǔ)言中,interface很好用,但是往往我們無(wú)法確定interface里存儲(chǔ)的到底是什么類(lèi)型,而且go又是強(qiáng)類(lèi)型語(yǔ)言。
type-switch就剛好幫我解決了這個(gè)問(wèn)題
//例子 var s interface{} switch s.(type) { case string: ?? ??? ?fmt.println("這是一個(gè)string類(lèi)型的變量") case int64: ?? ??? ?fmt.println("這是一個(gè)你int64類(lèi)型的變量") default: ?? ??? ?fmt.println("以上類(lèi)型都不是") } //另外如果只是單純的想知道變量的類(lèi)型,可以使用reflect.typeof() val := "abcdefg123" fmt.println(reflect.typeof(val))?? ??? ?//打印結(jié)果:string beego.Debug(reflect.typeof(val))?? ?//Debug打印結(jié)果:string
golang任何類(lèi)型interface{}
golang中可以使用interface{}表示任何類(lèi)型。
本文以例子的形式,演示interface{}的使用。
example1
package main import ( ? ? ? ? "fmt" ) func main() { ? ? ? ? var t1 interface{} = 2 ? ? ? ? v, ok := t1.(int) ? ? ? ? if ok { ? ? ? ? ? ? ? ? fmt.Println("int:", v) ? ? ? ? } else { ? ? ? ? ? ? ? ? fmt.Println("v:", v) ? ? ? ? } }
output:
$ ./test
int: 2
判斷interface的類(lèi)型,如果是int型,就輸出接口表示的值。
有時(shí),如果確定知道類(lèi)型T(例如int),會(huì)直接使用如下方式進(jìn)行斷言:
v := t1.(int)
但斷言失敗,會(huì)panic。可根據(jù)具體情況選擇使用哪種方式。
example2
package main import ( ? ? ? ? "fmt" ) func main() { ? ? ? ? var t1 interface{} = "abc" ? ? ? ? switch v := t1.(type) { ? ? ? ? case int: ? ? ? ? ? ? ? ? fmt.Println("int:", v) ? ? ? ? case string: ? ? ? ? ? ? ? ? fmt.Println("string:", v) ? ? ? ? default: ? ? ? ? ? ? ? ? fmt.Println("unknown type:", v) ? ? ? ? } }
如果t1為abc:
output:
$ ./test
string: abc
如果t1為23:
output:
$ ./test
int: 23
如果t1為1.2
output:
$ ./test
unknown type: 1.2
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go語(yǔ)言實(shí)現(xiàn)字符串切片賦值的方法小結(jié)
這篇文章主要給大家介紹了Go語(yǔ)言實(shí)現(xiàn)字符串切片賦值的兩種方法,分別是在for循環(huán)的range中以及在函數(shù)的參數(shù)傳遞中實(shí)現(xiàn),有需要的朋友們可以根據(jù)自己的需要選擇使用。下面來(lái)一起看看吧。2016-10-10Golang干貨分享之利用AST實(shí)現(xiàn)AOP功能
本文主要是一個(gè)純干貨分享,主要介紹了Golang如何利用AST實(shí)現(xiàn)AOP功能,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04go語(yǔ)言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等
這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Go?net?http超時(shí)應(yīng)用場(chǎng)景全面詳解
HTTP是一個(gè)復(fù)雜的多階段協(xié)議,因此沒(méi)有一個(gè)一刀切的超時(shí)解決方案,在這篇文章中,我將分解您可能需要應(yīng)用超時(shí)的各個(gè)階段,并研究在服務(wù)器端和客戶端上執(zhí)行超時(shí)的不同方法2024-01-01一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy方法
今天小編就為大家分享一篇一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08