亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將結構體轉換為元組切片而不進行反射

將結構體轉換為元組切片而不進行反射

Go
一只名叫tom的貓 2023-07-10 16:47:45
我需要將 a 轉換struct為[]Tuple. 每個元組將表示到該結構的每個葉節點的路徑。例如:type inner struct {  D int}type Example struct {  A string  B *inner  C []inner}e := Example{  A: "a",  B: &inner{    D: 0,  },  C: []inner{    inner{D:0}, inner{D:1}, inner{D:2},  },}func toTuple(e *Example) []Tuple {  // this function should return:  //  [  //    Tuple{"A", "a"}  //    Tuple{"B", "D", "0"}  //    Tuple{"C", 0, "D", 0}  //    Tuple{"C", 1, "D", 1}  //    Tuple{"C", 2, "D", 2}  //  ]}有沒有什么方法可以做到這一點而不必手動指定每個元組?我想避免做類似的事情:tuples = append(tuples, Tuple{"A", e.A})......for i, v := range e.C {  tuples = append(tuples, Tuple{"C", i, "D", v.D}}因為結構可能非常大,這會導致脆弱且容易出錯的代碼(例如,如果將新字段添加到結構中)。由于這是一個對性能敏感的應用程序,我想避免使用反射。有什么辦法可以做到這一點嗎?
查看完整描述

1 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

你將不得不使用反射。我知道反射在性能方面表現不佳,但值得您花時間嘗試它并在您注銷它之前對其進行基準測試。

或者,您可以使用代碼生成 - 可能仍會使用反射,但會在代碼生成時輸出將一起編譯的 go 代碼,因此在運行時不會影響性能。


查看完整回答
反對 回復 2023-07-10
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號