欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang如何用type-switch判斷interface變量的實(shí)際存儲(chǔ)類(lèi)型

 更新時(shí)間:2022年04月14日 16:58:18   作者:做一只會(huì)飛的象  
這篇文章主要介紹了golang如何用type-switch判斷interface變量的實(shí)際存儲(chǔ)類(lèi)型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

用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)字符串切片賦值的方法小結(jié)

    這篇文章主要給大家介紹了Go語(yǔ)言實(shí)現(xiàn)字符串切片賦值的兩種方法,分別是在for循環(huán)的range中以及在函數(shù)的參數(shù)傳遞中實(shí)現(xiàn),有需要的朋友們可以根據(jù)自己的需要選擇使用。下面來(lái)一起看看吧。
    2016-10-10
  • Go語(yǔ)言MD5加密用法實(shí)例

    Go語(yǔ)言MD5加密用法實(shí)例

    這篇文章主要介紹了Go語(yǔ)言MD5加密用法,實(shí)例分析了Go語(yǔ)言MD5加密的使用技巧,需要的朋友可以參考下
    2015-03-03
  • grpc入門(mén)Unary模式使用方法示例教程

    grpc入門(mén)Unary模式使用方法示例教程

    這篇文章主要為大家介紹了grpc入門(mén)Unary模式使用方法示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Golang干貨分享之利用AST實(shí)現(xiàn)AOP功能

    Golang干貨分享之利用AST實(shí)現(xiàn)AOP功能

    本文主要是一個(gè)純干貨分享,主要介紹了Golang如何利用AST實(shí)現(xiàn)AOP功能,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Go讀取配置文件的方法總結(jié)

    Go讀取配置文件的方法總結(jié)

    我們常見(jiàn)的配置文件的格式一般有:XML、JSON、INI、YAML、env和.properties,本文小編為大家整理了Go語(yǔ)言讀取這些格式的配置文件的方法,希望對(duì)大家有所幫助
    2023-10-10
  • go語(yǔ)言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等

    go語(yǔ)言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等

    這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • go 生成器模式的具體使用

    go 生成器模式的具體使用

    生成器是一種創(chuàng)建型設(shè)計(jì)模式,使你能夠分步驟創(chuàng)建復(fù)雜對(duì)象,本文主要介紹了go生成器模式的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Go?net?http超時(shí)應(yīng)用場(chǎng)景全面詳解

    Go?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
  • 淺析Go中原子操作的重要性與使用

    淺析Go中原子操作的重要性與使用

    這篇文章主要帶大家一起探索?Go?中原子操作的概念,了解為什么它們是重要的,以及如何有效地使用它們,文中的示例代碼講解詳細(xì),需要的可以了解下
    2023-11-11
  • 一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy方法

    一個(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

最新評(píng)論