佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Go語言中使用gorm小結(jié)

Go語言中使用gorm小結(jié)

熱門標簽:Linux服務器 網(wǎng)站排名優(yōu)化 百度競價排名 呼叫中心市場需求 服務外包 地方門戶網(wǎng)站 AI電銷 鐵路電話系統(tǒng)

首先說明的是,在項目中使用orm的好處很多:

  1. 防止直接拼接sql語句引入sql注入漏洞
  2. 方便對modle進行統(tǒng)一管理
  3. 專注業(yè)務,加速開發(fā)

壞處也是顯而易見的:

  1. 開發(fā)者與最終的sql語句隔了一層orm,因此可能會不慎引入爛sql
  2. 依賴于orm的成熟度,無法進行一些「復雜」的查詢。當然,復雜的查詢一大半都是應該從設(shè)計上規(guī)避的

留意不合法的時間值

MySQL的DATE/DATATIME類型可以對應Golang的time.Time。但是,如果DATE/DATATIME不慎插入了一個無效值,例如2016-00-00 00:00:00, 那么這條記錄是無法查詢出來的。會返回gorm.RecordNotFound類型錯誤。零值0000-00-00 00:00:00是有效值,不影響正常查詢。

留意tagsql:"default:null"

gorm對各種tag的支持非常完善。但是有些行為跟直覺不太一致,需要注意。當對某字段設(shè)置tagsql:"default:null"時,你想通過update設(shè)置該字段為null就不可能了,只能通過raw sql。這是gorm設(shè)計的取向問題。

如何通過gorm設(shè)置字段為null值

字段允許為null值肯定是設(shè)計存在問題。但是,往往前人埋下的坑需要你去填。gorm作者給出了兩種方法,以string為例:

在golang中,聲明該字段為*string

使用sql.NullString類型

推薦使用后者。

留意連接串中的loc

例如通過如下連接串打開mysql連接:

復制代碼 代碼如下:

db, err := gorm.Open("mysql", "db:dbadmin@tcp(127.0.0.1:3306)/foo?charset=utf8parseTime=trueloc=Local")

parseTime=trueloc=Local說明會解析時間,時區(qū)是機器的local時區(qū)。機器之間的時區(qū)可能不一致會設(shè)置有問題,這導致從相同庫的不同實例查詢出來的結(jié)果可能解析以后就不一樣。因此推薦將loc統(tǒng)一設(shè)置為一個時區(qū),如parseTime=trueloc=America%2FChicago

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

您可能感興趣的文章:
  • golang gorm 結(jié)構(gòu)體的表字段缺省值設(shè)置方式
  • golang gorm 操作mysql及gorm基本用法
  • gorm update傳入struct對象,零值字段不更新的解決方案

標簽:銅川 衡水 湖南 仙桃 蘭州 崇左 湘潭 黃山

巨人網(wǎng)絡通訊聲明:本文標題《Go語言中使用gorm小結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    山东省| 隆德县| 东明县| 游戏| 东乡县| 昆明市| 陆良县| 永川市| 西畴县| 开化县| 平安县| 邳州市| 和顺县| 耒阳市| 墨竹工卡县| 德保县| 崇明县| 英山县| 韩城市| 深水埗区| 新疆| 昭苏县| 浑源县| 泰宁县| 灌云县| 达拉特旗| 内丘县| 读书| 乌兰察布市| 静安区| 金山区| 历史| 新疆| 正蓝旗| 延庆县| 达尔| 会昌县| 陕西省| 邢台市| 临沂市| 鹰潭市|