国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用golang在與數據庫訪問過程中的一點想法

channg / 3483人閱讀

摘要:自己寫語句執行,這可能是最傻的一種方法了,不過卻能保證事情完全按照自己的想法執行。

遇到的問題

golang對于基本類型初始化的處理,是自動給基本類型賦值為默認值。比如:

var i int//在這里如果不對i做任何賦值,那么i的值為零

這個特性在很多地方能夠避免訪問到未初始化變量的尷尬,但是由此也引出了另外一個問題,就是在進行數據庫訪問操作時應該如果對待這樣的默認值。

現在我們假設一個場景,表A有3個字段{AID int,AField1 string,AField2 string},表B也有3個字段{ID int,BField1 string,REF_AID int},其中表B中的REF_AID是外鍵對應表A中的AID。對應在GO中的數據結構應該為:

type A struct{
    AID int//主鍵
    AField1 string
    AField2 string
}

type B struct{
    BID int//主鍵
    BField1 string
    REF_AID int//外鍵,對應AID
}

在new對象B的時候,B中的三個值就分別被默認的初始化為{0,"",0},如果此時不對內容做任何操作,直接執行插入,問題就可能會變得很嚴重,因為A中很可能并沒有任何一條記錄的ID值為0,數據庫報錯,這條插入是一定會失敗。但是僅僅在數據庫層面上來看,數據庫的結構是沒問題的,表B中的REF_AID可以為空,在其他的語言中,如果沒有對具體數據進行初始化,該屬性會為空,對應插入的時候也會為空,但是在golang中,由于語言級別的默認初始化,使得這個插入過程會有大量的0的存在,觸犯到原本表的約束規則而導致插入失敗。

在orm中也沒有看到能夠解決這個問題的辦法,可能是我用的不夠仔細,這個留待以后再說。

自己的一點想法

把所有的數據庫中相關的表都添加一條默認的以0為id的記錄,該記錄不需要有意義,只是用來防止歧義以及違反約束引起的操作失敗,特別是一些ref_表,因為其中數據變動不大,卻經常與其他一些表存在外鍵關系。這樣做會給數據庫帶來一些額外的開銷,但是作為一個臨時的解決辦法似乎還不錯,至少能讓數據處理流程正確的運行。

從orm中解決問題。這個只是一個想法,不過這很可能變成一種無理的要求,因為這需要orm去判斷你的Field中存放的這個0到底是你自己就想指定的0值,還是你不想要卻被語言默認初始化出來的0。

自己寫SQL語句執行,這可能是最傻的一種方法了,不過卻能保證事情完全按照自己的想法執行。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17439.html

相關文章

  • React 服務端渲染完美的解決方案

    摘要:服務端渲染兩種方式根據上文介紹對服務端渲染利弊有所了解,我們可以根據利弊權衡取舍,最近在做服務端渲染的項目,找到多種服務端渲染解決方案,大致分為兩類。第一種方式傳統方式服務端渲染,解決用戶體驗和更好的,有諸多工具使用這種方式如的的等。 最近在開發一個服務端渲染工具,通過一篇小文大致介紹下服務端渲染,和服務端渲染的方式方法。在此文后面有兩中服務端渲染方式的構思,根據你對服務端渲染的利弊權...

    DesGemini 評論0 收藏0
  • 明星分分合合的洪荒點擊量,微博Mesh服務化改造如何支撐?(附PPT下載)

    摘要:為了解決這一系列問題,微博從年開發了語言的框架,并基于此完成了服務化改造。這些經歷之下微博也積累了一套服務治理型的服務化體系。的版,所要解決的是微博平臺內部服務之間的調用,因此協議時,其實并沒有考慮到跨語言的問題,用的是對比較友好的。 showImg(https://segmentfault.com/img/remote/1460000012601596?w=1080&h=606); ...

    ShowerSun 評論0 收藏0
  • docker在centos安裝golang操作及部分理解

    摘要:前兩天在本地安裝了,熟悉了下命令之后,還是忍不住到上進行了一波鏡像部署,以下是我的操作步驟和一些想法。但是如果想要將當前目錄的文件復制進里頭,首先要保證鏡像在運行,然后命令中的容器名使用我圈出來的那個名字。 前兩天在本地安裝了docker,熟悉了下命令之后,還是忍不住到centos上進行了一波golang鏡像部署,以下是我的操作步驟和一些想法。準備:一臺安裝了docker的可聯網的ce...

    huaixiaoz 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<