Golang通過反射對結構體進行賦值和其他操作

2021-10-12 10:27:13 字數 827 閱讀 1809

通過反射可以方便快捷地訪問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...