golang獲取變量或?qū)ο箢?lèi)型的幾種方式總結(jié)
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)題解決
本文主要介紹了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
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)要介紹,進(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)景
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)繼承
這篇文章主要為大家詳細(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ù)的方法,實(shí)例分析了Go語(yǔ)言中zlib的使用技巧,需要的朋友可以參考下2015-03-03
淺談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ù)器的方法,結(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)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

