golang 利用反射機制對結構體進行迴圈賦值

2021-07-08 15:41:41 字數 776 閱讀 3881

熟悉c語言的朋友都知道,c語言的指標操作某些方面是很方便的。

如假設你知道記憶體中有乙個連續100個位元組的區域,或者你有乙個連續100個位元組的位元組陣列,你需要用其對乙個已經定義好的結構體進行賦值,在c語言你可以簡單地將記憶體資料中的頭位址,或者位元組陣列的頭位址賦值給結構體指標就行。

但在go語言中該如何實現?

假設你有如下的golng結構體:

這個結構體的資料可以對應乙個byte[100]位元組組。

例如 dtemp_des 欄位的低位時b[1],高位是b[2]

temp_des 的低位時b[3],高位b[4] 如此類推

但你對這個結構體賦值的時候你不能笨笨地乙個個賦值,如果欄位少還可以,欄位多比如100個字段,那你會瘋掉

笨的做法:

nm:=&nm820_sysval{}

nm.dtemp_des=uint16(b[1])+uint16(b[2]<<8)

........

乙個個賦值

詳細**如下

注意:

1.開頭要引入reflect包

2.變數nm為結構體指標

3.陣列b用於結構體賦值的位元組陣列

golang的反射機制

首先,golang反射,分為 t reflect.typeof n num t.numfield t reflect.typeof n num t.field n int 從0開始,以宣告的順序排序type students struct func stu students t func stu s...

活學活用golang的反射機制

var data map string inte ce type fruit struct func newfruit data map string inte ce fruit return s func main 這樣實現簡單快速,但也有缺點 是否有更好的解決方法,自動遍歷struct物件,並進...

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

通過反射可以方便快捷地訪問golang的結構體欄位,並進行賦值或其他操作。當兩個結構體內容相同但名字不同時,如何快捷地進行賦值?或者內容有交集,對交集部分進行賦值 package main import fmt reflect type my struct struct type another s...