go 反射應用
阿新 • • 發佈:2019-02-07
直接上程式碼
package main import ( "fmt" "reflect" ) type EnvKey struct { RD string BR string PT string AD string LE string } func main() { // 初始化機構體 t := EnvKey{"/dev/ttyUSB0", "19200", "8080", "1105", "20"} // 反射 s := reflect.ValueOf(&t).Elem() typeOfT := s.Type() // 迴圈遍歷結構體,獲取各個元素的型別,值 for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d: %s %s = %v\n", i, typeOfT.Field(i).Name, f.Type(), f.Interface()) } }
定義一個結構體,給機構體賦初值,通過for迴圈遍歷結構體,拿到結構體各個元素的值。
注意:我在定義結構體中各個元素的名稱時,比如結構體第一個元素RD,開始寫成RtuDevice,總是無法正常遍歷,把元素改短以後就成功了,可能是反射的要求吧。具體的原因沒有太深入的研究,有興趣的朋友,可以仔細研究一下。不介意可以告訴我一下,感謝。