1. 程式人生 > 程式設計 >解決goxorm無法更新值為預設值的問題

解決goxorm無法更新值為預設值的問題

今天遇到個問題,goxorm無法更新某一個欄位為0.

xxTable := &models.XXTable{Visible: visible}

affected,err := eng.Where("id=?",id).Update(xxTable)

這種情況下,因為go的結構初始值都是各自的0值,所以xorm無法識別要更新結構體中的哪個col,如下方法寫可以正常解決。

xxTable := &models.XXTable{Visible: visible}

affected,id).Cols("visible").Update(xxTable)

補充:golang gin xorm注意事項

1. 無論是golang還是xorm中,在填寫j'son欄位時,注意空格,比如 `json:"abcd "` `json:"abcd"`是不一樣的,不仔細對比會出錯

2.當結合gin框中的

c.JSON(http.StatusOK,gin.H{})操作

並且使用xorm中的join,find操作時(https://www.kancloud.cn/xormplus/xorm/167102)要注意如下現象,

假如定義兩個結構體對應兩個表

解決goxorm無法更新值為預設值的問題

然後使用聯合查詢,先把兩個結構體結合成一個結構體,假如如下,在UserGroup中使用User和Group匿名結構體,

解決goxorm無法更新值為預設值的問題

那麼當我們使用gin的c.JSON(http.StatusOK,gin.H{"data":UserGroup})返回資料時會導致Group和User中同名欄位顯示不了,這應該是gin和xorm的不是很相容造成的(沒有深究),要解決這個問題,最好讓UserGroup中的User和Group不要以匿名結構體的形式存在,可以改成

type UserGroup struct {
  MyUser User `xorm:"extends" json:"你要json中返回的名字"`
  MyGroup Group `xorm:"extends" json:"你要json中返回的名字"`
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。