php小編草莓在程式開發中,我們常會使用Gorm物件進行資料庫操作。而有時候,我們需要從Gorm物件中取得列名稱和對應的值。那麼,要如何實現這個需求呢?在Gorm中,我們可以透過反射來取得物件的屬性和值,並結合Gorm的標籤來取得列名稱。接下來,我將為大家詳細介紹如何從Gorm物件中取得列名稱和值的方法。讓我們一起來看看吧!
我想寫一個函數,它可以取得從資料庫載入的任何物件(透過 gorm)並列印出所有列名稱和值。顯然,關鍵部分是將我的任何 Gorm 模型傳遞到此函數中的能力。我沒有在下面展示這些,因為它們都很簡單。
到目前為止,我擁有的是一個帶有介面的函數,以及一些呼叫它的測試程式碼:
func testfunc(s interface{}) { // type v := reflect.TypeOf(s) fmt.Println(v) // fields? for i := 0; i < v.NumField(); i++ { fmt.Println(i) } }
trans := make([]orm.Trans, 0) db.Where("state = ?", state.FINISHED).Limit(1).Find(&trans) testfunc(trans)
運行時,會列印出類型,然後出現恐慌:
[]orm.Trans panic: reflect: call of reflect.Value.NumField on slice Value
我是新手,所以歡迎你的想法。看來我可能的選擇是:
謝謝。
嘗試這種方法:
func testfunc(x interface{}){ v := reflect.ValueOf(x) s := reflect.TypeOf(x) names:=make([]interface{},v.NumField()) values := make([]interface{}, v.NumField()) for i := 0; i < v.NumField(); i++ { values[i] = v.Field(i).Interface() names[i] = s.Field(i).Name } fmt.Println("Names",names) fmt.Println("values",values) }
1-您正在傳遞結構體切片。 (如果使用切片,請避免在循環中呼叫上面的函數。)
2-我正在將此結構傳遞給上面的函數
x := struct { Name string Id int }{"Zargham", 2}
3-取得輸出:-
Names [Name Id] values [Zargham 2]
以上是如何從 Gorm 物件取得列名稱和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!