通過反射可以方便快捷地訪問golang的結構體欄位,並進行賦值或其他操作。
當兩個結構體內容相同但名字不同時,如何快捷地進行賦值?
【或者內容有交集,對交集部分進行賦值】
package main
import
("fmt"
"reflect"
)type my_struct struct
type another_struct struct
func
main()
b :=
&another_struct
c := reflect.
typeof
(*a)
//獲取type
d := reflect.
typeof
(*b)
g := reflect.
valueof
(a).
elem()
//獲取value
h := reflect.
valueof
(b).
elem()
//雙迴圈,對相同名字對欄位進行賦值
for i :=
0; i < c.
numfield()
; i++}}
fmt.
println
(*a,
*b)//
}
通過typeof和valueof操作結構體的方式,可以方便快捷地便利結構體的字段,從而更優雅地操作結構體欄位。包括一些比較和賦值等操作,如果結構體中有指標型別,則對指標型別特殊處,其他的仍在迴圈中遍歷即可 golang通過反射設定結構體變數的值
如果需要動態設定struct變數field的情況下,可以利用reflect來完成。package main import fmt reflect 定義結構體person type person struct func main fmt.prin程式設計客棧tln person 修改前 pp refl...
golang 利用反射機制對結構體進行迴圈賦值
熟悉c語言的朋友都知道,c語言的指標操作某些方面是很方便的。如假設你知道記憶體中有乙個連續100個位元組的區域,或者你有乙個連續100個位元組的位元組陣列,你需要用其對乙個已經定義好的結構體進行賦值,在c語言你可以簡單地將記憶體資料中的頭位址,或者位元組陣列的頭位址賦值給結構體指標就行。但在go語言...
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...