日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

golang如何用type-switch判斷interface變量的實際存儲類型_Golang

作者:做一只會飛的象 ? 更新時間: 2022-06-15 編程語言

用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打印結果:string

golang任何類型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。可根據具體情況選擇使用哪種方式。

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

原文鏈接:https://blog.csdn.net/weixin_42869591/article/details/86423475

欄目分類
最近更新