最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang獲取變量或?qū)ο箢?lèi)型的幾種方式總結(jié)

 更新時(shí)間:2022年12月26日 10:00:24   作者:Byte-Coder  
在golang中并沒(méi)有提供內(nèi)置函數(shù)來(lái)獲取變量的類(lèi)型,但是通過(guò)一定的方式也可以獲取,下面這篇文章主要給大家介紹了關(guān)于golang獲取變量或?qū)ο箢?lèi)型的幾種方式,需要的朋友可以參考下

fmt.Printf("%T")方式

示例:

var1 := "hello world"
fmt.Printf("var1 = %T\n", var1)

這個(gè)是最簡(jiǎn)單,也是最推薦的在at rumtime時(shí)獲取變量類(lèi)型的方式,

用fmt.Printf("%T")實(shí)現(xiàn)返回變量類(lèi)型的函數(shù)

由此衍生出可復(fù)用獲取變量或者對(duì)象type的函數(shù),如下面函數(shù),直接返回變量類(lèi)型

func typeofVariable(variable interface{}) string {
   return fmt.Sprintf("%T", variable)
}

 reflect.TypeOf方式

示例:

var1 := "hello world"
fmt.Printf("var1: %s\n", reflect.TypeOf(var1))

用  reflect包里的函數(shù) TypeOf()來(lái)實(shí)現(xiàn),用起來(lái)相對(duì)來(lái)說(shuō)復(fù)雜些,如果只是單純地想在runtime時(shí)獲取一下變量類(lèi)型,還是推薦第一種方式

用reflect.TypeOf實(shí)現(xiàn)返回變量類(lèi)型的函數(shù)

由此衍生出可復(fù)用獲取變量或?qū)ο髏ype的函數(shù),如下面函數(shù),直接返回變量類(lèi)型

func typeofVariable(variable interface{}) string {
    return reflect.TypeOf(variable).String()
}

reflect.ValueOf.Kind()方式

示例:

var1 := "hello world"
fmt.Println(reflect.ValueOf(var1).Kind())

用 reflect.ValueOf.Kind()實(shí)現(xiàn)返回變量類(lèi)型的函數(shù)

func typeofVariable(variable interface{}) string {
        return reflect.ValueOf(variable).Kind().String()
}

斷言方式

func typeofObject(variable interface{}) string {
        switch variable.(type) {
        case string:
                return "string"
        case int:
                return "int"
        case float32:
                return "float32"
        case float64:
                return "float64"
        case bool:
                return "boolean"
        case []string:
                return "[]string"
        case complex128:
                return "complex128"
        case complex64:
                return "complex64"
        case map[string]float64:
                return "map"
        case Employee:
                return "Employee"
        default:
                return "unknown"
        }
}

代碼示例:

package main
 
import (
    "fmt"
    "reflect"
)
 
 
type Employee struct {
    name string
    age  int
    salary float64
}
 
 
// 4 ways to return a variable's type at runtime
 
func typeofObject(variable interface{}) string {
        switch variable.(type) {
        case string:
                return "string"
        case int:
                return "int"
        case float32:
                return "float32"
        case float64:
                return "float64"
        case bool:
                return "boolean"
        case []string:
                return "[]string"
        case complex128:
                return "complex128"
        case complex64:
                return "complex64"
        case map[string]float64:
                return "map"
        case Employee:
                return "Employee"
        default:
                return "unknown"
        }
}
 
func main() {
 
    var1 := "hello world"
    var2 := 10
    var3 := 2.55
    var4 := []string{"BeiJing", "ShangHai", "ShenZhen"}
    var5 := map[string]float64{"BeiJing": 3.2, "ShaiHai": 1.2}
    var6 := complex(3,4)
    var7 := true
    var8 := Employee{"Sam",30,15000.5}
 
    fmt.Println("###############    Using %T with Printf    ########################")
 
    fmt.Printf("var1 = %T\n", var1)
    fmt.Printf("var2 = %T\n", var2)
    fmt.Printf("var3 = %T\n", var3)
    fmt.Printf("var4 = %T\n", var4)
    fmt.Printf("var5 = %T\n", var5)
    fmt.Printf("var6 = %T\n", var6)
    fmt.Printf("var7 = %T\n", var7)
    fmt.Printf("var8 = %T\n", var8)
 
 
    fmt.Println("###############Using reflect.TypeOf Function #######################")
    fmt.Printf("var1: %s\n", reflect.TypeOf(var1))
    fmt.Printf("var2: %s\n", reflect.TypeOf(var2))
    fmt.Printf("var3: %s\n", reflect.TypeOf(var3))
    fmt.Printf("var4: %s\n", reflect.TypeOf(var4))
    fmt.Printf("var5: %s\n", reflect.TypeOf(var5))
    fmt.Printf("var6: %s\n", reflect.TypeOf(var6))
    fmt.Printf("var7: %s\n", reflect.TypeOf(var7))
    fmt.Printf("var8: %s\n", reflect.TypeOf(var8))
 
 
    fmt.Println("###############Using reflect.ValueOf.Kind() ########################")
    fmt.Println(reflect.ValueOf(var1).Kind())
    fmt.Println(reflect.ValueOf(var2).Kind())
    fmt.Println(reflect.ValueOf(var3).Kind())
    fmt.Println(reflect.ValueOf(var4).Kind())
    fmt.Println(reflect.ValueOf(var5).Kind())
    fmt.Println(reflect.ValueOf(var6).Kind())
    fmt.Println(reflect.ValueOf(var7).Kind())
    fmt.Println(reflect.ValueOf(var8).Kind())
 
 fmt.Println("################## Using Type assertions ###########################")
    fmt.Println(typeofObject(var1))
    fmt.Println(typeofObject(var2))
    fmt.Println(typeofObject(var3))
    fmt.Println(typeofObject(var4))
    fmt.Println(typeofObject(var5))
    fmt.Println(typeofObject(var6))
    fmt.Println(typeofObject(var7))
    fmt.Println(typeofObject(var8))
 
 
}
 
/*
幾個(gè)復(fù)用的函數(shù)來(lái)判斷變量的類(lèi)型at runtime
// Using %T
func typeofVariable(variable interface{}) string {
   return fmt.Sprintf("%T", variable)
}
// Using reflect.TypeOf()
func typeofVariable(variable interface{}) string {
    return reflect.TypeOf(variable).String()
}
// Using reflect.ValueOf().Kind()
func typeofVariable(variable interface{}) string {
        return reflect.ValueOf(variable).Kind().String()
}
*/

結(jié)果演示:

總結(jié)

到此這篇關(guān)于golang獲取變量或?qū)ο箢?lèi)型的幾種方式總結(jié)的文章就介紹到這了,更多相關(guān)golang獲取變量或?qū)ο箢?lèi)型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • goland?導(dǎo)入github包報(bào)紅問(wèn)題解決

    goland?導(dǎo)入github包報(bào)紅問(wèn)題解決

    本文主要介紹了Go項(xiàng)目在GoLand中導(dǎo)入依賴(lài)標(biāo)紅問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 詳解Go語(yǔ)言中單鏈表的使用

    詳解Go語(yǔ)言中單鏈表的使用

    鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱(chēng)為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。本文將通過(guò)實(shí)例為大家詳解Go語(yǔ)言中單鏈表的常見(jiàn)用法,感興趣的可以了解一下
    2022-08-08
  • golang?熔斷器的實(shí)現(xiàn)過(guò)程

    golang?熔斷器的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了golang?熔斷器的實(shí)現(xiàn)過(guò)程,Go?項(xiàng)目中使用熔斷技術(shù)提高系統(tǒng)容錯(cuò)性。接下倆就來(lái)給打家介紹?go?熔斷器和其使用,需要的朋友可以參考一下
    2022-01-01
  • golang協(xié)程與線(xiàn)程區(qū)別簡(jiǎn)要介紹

    golang協(xié)程與線(xiàn)程區(qū)別簡(jiǎn)要介紹

    這篇文章主要介紹了golang協(xié)程與線(xiàn)程區(qū)別簡(jiǎn)要介紹,進(jìn)程是操作系統(tǒng)資源分配的基本單位,是程序運(yùn)行的實(shí)例,線(xiàn)程是操作系統(tǒng)調(diào)度到CPU中執(zhí)行的基本單位
    2022-06-06
  • Golang cron 定時(shí)器和定時(shí)任務(wù)的使用場(chǎng)景

    Golang cron 定時(shí)器和定時(shí)任務(wù)的使用場(chǎng)景

    Ticker是一個(gè)周期觸發(fā)定時(shí)的計(jì)時(shí)器,它會(huì)按照一個(gè)時(shí)間間隔往channel發(fā)送系統(tǒng)當(dāng)前時(shí)間,而channel的接收者可以以固定的時(shí)間間隔從channel中讀取事件,這篇文章主要介紹了Golang cron 定時(shí)器和定時(shí)任務(wù),需要的朋友可以參考下
    2022-09-09
  • Go語(yǔ)言使用組合的思想實(shí)現(xiàn)繼承

    Go語(yǔ)言使用組合的思想實(shí)現(xiàn)繼承

    這篇文章主要為大家詳細(xì)介紹了在 Go 里面如何使用組合的思想實(shí)現(xiàn)“繼承”,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以了解一下
    2022-12-12
  • go語(yǔ)言通過(guò)zlib壓縮數(shù)據(jù)的方法

    go語(yǔ)言通過(guò)zlib壓縮數(shù)據(jù)的方法

    這篇文章主要介紹了go語(yǔ)言通過(guò)zlib壓縮數(shù)據(jù)的方法,實(shí)例分析了Go語(yǔ)言中zlib的使用技巧,需要的朋友可以參考下
    2015-03-03
  • 淺談goland導(dǎo)入自定義包時(shí)出錯(cuò)(一招解決問(wèn)題)

    淺談goland導(dǎo)入自定義包時(shí)出錯(cuò)(一招解決問(wèn)題)

    這篇文章主要介紹了淺談goland導(dǎo)入自定義包時(shí)出錯(cuò)(一招解決問(wèn)題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法

    Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法

    這篇文章主要介紹了Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言基于HTTP包創(chuàng)建WEB服務(wù)器客戶(hù)端與服務(wù)器端的實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • Go+Lua解決Redis秒殺中庫(kù)存與超賣(mài)問(wèn)題

    Go+Lua解決Redis秒殺中庫(kù)存與超賣(mài)問(wèn)題

    本文主要介紹了Go+Lua解決Redis秒殺中庫(kù)存與超賣(mài)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

郴州市| 汉阴县| 左权县| 康平县| 临颍县| 利辛县| 望奎县| 尚义县| 浮山县| 思茅市| 洪湖市| 长春市| 宜丰县| 昌宁县| 朔州市| 无棣县| 明水县| 莱阳市| 武川县| 高州市| 惠来县| 鲜城| 怀远县| 清原| 防城港市| 子长县| 永宁县| 宜川县| 新田县| 迭部县| 勐海县| 新乡市| 天峻县| 扶沟县| 东山县| 保康县| 嘉鱼县| 安西县| 嫩江县| 吉木萨尔县| 托克托县|