如果需要動態設定struct變數field的情況下, 可以利用reflect來完成。
package main
import (
"fmt"
"reflect"
)// 定義結構體person
type person struct
func main()
fmt.prin程式設計客棧tln(person) // 修改前
pp := reflect.valueof(&person) // 取得struct變數的指標
field := pp.elem().fiewww.cppcns.comldbyname("name") //獲取指定field
field.setstring("gerrylon") // 設定值
field = pp.elem().fieldbyname("age")
field.setint(26)
fmt.print程式設計客棧ln(person) // 修改後
}事實上對於原始值也是一樣的, 要利用指標, 因為golang預設都是傳值, 示例如下:
var f float64 = 3.4
fmt.println(f) // 3.4
p := reflect.valueof(&f) // 注意這裡一定要是指標, 否則傳遞給valueof的是f的拷貝
v := p.elem()
v.setfloat(3.5)
fmt.println(f) // 3.5
反射傳入的應該是變數的指標
利用 fieldbyname()方法可以設定struct的指定key的值, 非常強大。
補充:golang通過反射修改變數的值
packag main
import (
"fmt"
"reflect"
)func reflecttest(str inte***ce{})
func main()
本文標題: golang通過反射設定結構體變數的值
本文位址:
Golang通過反射對結構體進行賦值和其他操作
通過反射可以方便快捷地訪問golang的結構體欄位,並進行賦值或其他操作。當兩個結構體內容相同但名字不同時,如何快捷地進行賦值?或者內容有交集,對交集部分進行賦值 package main import fmt reflect type my struct struct type another s...
golang反射 二 反射結構體切片讀取資料
type man struct s1 make man,0 s1 s1,man s1 s1,man s1 s1,man func v inte ce l getvalue.len for i 0 i l i fmt.printf type kind s,type name s,value v n t...
golang反射還原結構體中的字段
假設有這樣乙個結構體 type s struct a s 3.14 用反射可以輕鬆拿到每個欄位的值 reflect.valueof a fieldbyname a reflect.valueof a fieldbyname b reflect.valueof a fieldbyname c 但這樣返...