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

golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)

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

fmt.Printf("%T")方式

示例:

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

這個是最簡單,也是最推薦的在at rumtime時獲取變量類型的方式,

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

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

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()來實現(xiàn),用起來相對來說復雜些,如果只是單純地想在runtime時獲取一下變量類型,還是推薦第一種方式

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

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

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()實現(xiàn)返回變量類型的函數(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))
 
 
}
 
/*
幾個復用的函數(shù)來判斷變量的類型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é)

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

相關文章

  • goland?導入github包報紅問題解決

    goland?導入github包報紅問題解決

    本文主要介紹了Go項目在GoLand中導入依賴標紅問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • 詳解Go語言中單鏈表的使用

    詳解Go語言中單鏈表的使用

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

    golang?熔斷器的實現(xiàn)過程

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

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

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

    Golang cron 定時器和定時任務的使用場景

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

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

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

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

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

    淺談goland導入自定義包時出錯(一招解決問題)

    這篇文章主要介紹了淺談goland導入自定義包時出錯(一招解決問題),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言使用HTTP包創(chuàng)建WEB服務器的方法

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

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

    Go+Lua解決Redis秒殺中庫存與超賣問題

    本文主要介紹了Go+Lua解決Redis秒殺中庫存與超賣問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

太仆寺旗| 天气| 泗阳县| 正定县| 灯塔市| 泾川县| 土默特左旗| 平潭县| 静乐县| 南京市| 遂昌县| 河池市| 故城县| 长乐市| 汉中市| 嘉义县| 温泉县| 安岳县| 永兴县| 乐安县| 徐闻县| 宿州市| 屏东市| 盐边县| 通河县| 乌拉特后旗| 敖汉旗| 岳阳县| 游戏| 巴楚县| 文昌市| 开鲁县| 蕉岭县| 姜堰市| 定结县| 宜城市| 旅游| 宝清县| 色达县| 临夏市| 宁武县|