golang通過反射設定結構體變數的值

2022-09-21 17:09:17 字數 1020 閱讀 3601

如果需要動態設定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 但這樣返...