1 回答

TA貢獻1921條經(jīng)驗 獲得超9個贊
對于您的第一個提案(僅查詢請求的字段),有兩種方法(回答“這可行嗎?”和“我將如何實施第一種方法?”):
動態(tài)地創(chuàng)建一個(可能是匿名的)
struct
并使用encoding/json
.實現(xiàn)一個包裝器,它將
*database/sql.Rows
您從查詢中返回的內(nèi)容轉(zhuǎn)換為 JSON。
對于方法(1.),您將需要以某種方式struct
為原始屬性的任何組合創(chuàng)建s struct
。由于reflect
無法在運行時創(chuàng)建新的結(jié)構(gòu)類型,您唯一的機會就是在編譯時生成它們。組合爆炸會使你的二進制文件膨脹,所以不要那樣做。
方法(2.)應謹慎處理,只能作為最后的手段。獲取請求字段列表并使用從 DB 獲得的值寫出 JSON 聽起來很簡單,并且不涉及反射。但是,您的解決方案將(很可能)比encoding/json
.
在閱讀您的問題時,我也考慮過使用json:"omitempty"
struct 標簽。我認為這是更可取的解決方案。它既不涉及元編程也不涉及編寫自己的 JSON 編碼器,這是一件好事。請注意在某些字段丟失的情況下的影響(客戶端可能必須考慮這一點)。您可以始終查詢所有屬性并使用反射覆蓋不需要的屬性。
最后,上述所有解決方案都是次優(yōu)的,最好的解決方案是根本不實現(xiàn)該功能。我希望您有充分的理由使屬性可變,我很高興根據(jù)您的解釋進一步澄清我的答案。但是,如果資源的其中一個屬性太大,它可能應該是子資源。
- 1 回答
- 0 關注
- 193 瀏覽
添加回答
舉報