golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)
fmt.Printf("%T")方式
示例:
var1 := "hello world"
fmt.Printf("var1 = %T\n", var1)這個是最簡單,也是最推薦的在at rumtime時獲取變量類型的方式,
用fmt.Printf("%T")實現(xiàn)返回變量類型的函數(shù)
由此衍生出可復(fù)用獲取變量或者對象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),用起來相對來說復(fù)雜些,如果只是單純地想在runtime時獲取一下變量類型,還是推薦第一種方式
用reflect.TypeOf實現(xiàn)返回變量類型的函數(shù)
由此衍生出可復(fù)用獲取變量或?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))
}
/*
幾個復(fù)用的函數(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é)
到此這篇關(guān)于golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)的文章就介紹到這了,更多相關(guān)golang獲取變量或?qū)ο箢愋蛢?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談goland導(dǎo)入自定義包時出錯(一招解決問題)
這篇文章主要介紹了淺談goland導(dǎo)入自定義包時出錯(一招解決問題),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言使用HTTP包創(chuàng)建WEB服務(wù)器的方法
這篇文章主要介紹了Go語言使用HTTP包創(chuàng)建WEB服務(wù)器的方法,結(jié)合實例形式分析了Go語言基于HTTP包創(chuàng)建WEB服務(wù)器客戶端與服務(wù)器端的實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下2016-07-07

