golang如何用type-switch判斷interface變量的實際存儲類型
用type-switch判斷interface的實際存儲類型
在go語言中,interface很好用,但是往往我們無法確定interface里存儲的到底是什么類型,而且go又是強類型語言。
type-switch就剛好幫我解決了這個問題
//例子
var s interface{}
switch s.(type) {
case string:
?? ??? ?fmt.println("這是一個string類型的變量")
case int64:
?? ??? ?fmt.println("這是一個你int64類型的變量")
default:
?? ??? ?fmt.println("以上類型都不是")
}
//另外如果只是單純的想知道變量的類型,可以使用reflect.typeof()
val := "abcdefg123"
fmt.println(reflect.typeof(val))?? ??? ?//打印結果:string
beego.Debug(reflect.typeof(val))?? ?//Debug打印結果:stringgolang任何類型interface{}
golang中可以使用interface{}表示任何類型。
本文以例子的形式,演示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的類型,如果是int型,就輸出接口表示的值。
有時,如果確定知道類型T(例如int),會直接使用如下方式進行斷言:
v := t1.(int)
但斷言失敗,會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
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
go語言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等
這篇文章主要為大家介紹了go語言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
一個簡單的Golang實現(xiàn)的HTTP Proxy方法
今天小編就為大家分享一篇一個簡單的Golang實現(xiàn)的HTTP Proxy方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

