搜尋
首頁後端開發Golang使用database/sql時應避免掉進這11個坑 ! (Go 資料庫)

我們是 使用database/sql時應避免掉進這11個坑 ! (Go 資料庫) 語言及其資料庫存取程式庫 database/sql

的忠實粉絲。正如你可能親眼看到的那樣,

database/sql使用database/sql時應避免掉進這11個坑 ! (Go 資料庫) 的體積非常小,但是你可以用它做很多事情。這包括大量的錯誤和欺騙性錯誤的風險。這篇部落格文章專門介紹我們過去犯過的一些錯誤,希望到時候你不會再犯同樣的錯誤。

常見陷阱

在循環內延遲。

長生命期函數在迴圈內有查詢,在迴圈內延遲

rows.Close()
    ,會導致記憶體和連線使用量都無限制地成長。
  • 開啟許多 db

    物件。
  • 請建立一個全域
  • sql.DB

    ,並且不要為你的 API 伺服器應該回應的每個傳入 HTTP 請求開啟一個新的。否則,你將開啟和關閉大量到資料庫的 TCP 連線。 TIME_WAIT 狀態下的延遲,負載和 TCP 連線很多。 操作完成後不做 rows.Close()

  • 忘記關閉 rows 變數意味著連線洩漏。再加上伺服器上不斷增長的負載,這可能意味著會遇到
  • max_connections

    錯誤或類似情況。請盡快運行 rows.Close() ,即使它稍後會再次用到(也是無害的)。出於同樣的原因,將 db.QueryRow().Scan() 連結在一起。 預處理語句膨脹。 如果程式碼以高並發運行,請考慮預處理語句是否是正確的解決方案,因為當連接繁忙時,它們可能會在不同的連接上重新預處理多次。

  • strconv 或 casts 使程式碼雜亂無章。 建議將結果掃描到一個你想要的類型的變數中,讓

    .Scan()
  • 在幕後為你轉換。
  • 錯誤處理和重試導致程式碼混亂。

    database/sql
  • 為你處理連線池、重新連線和重試邏輯。
  • rows.Next()

    之後忘記檢查錯誤。
  • 別忘了,
  • rows.Next()

    迴圈可能會異常退出。 使用 db.Query()

    進行非 SELECT 查詢。
  • 如果沒有結果集,不要告訴 使用database/sql時應避免掉進這11個坑 ! (Go 資料庫) 你希望在結果集上迭代,否則會洩漏連線。
  • 假設後續語句使用相同的連線。 如果連續執行兩個語句,則它們很可能會在兩個不同的連線上運作。運行

    LOCK TABLES tbl1 WRITE
  • ,然後運行
  • SELECT * FROM tbl1

    ,你很可能會阻塞並等待。如果需要保證使用單一語句,則需要使用參數 sql.Tx在使用 TX 的同時存取資料庫。

    sql.Tx
  • 與交易綁定,但資料庫沒有綁定,所以存取它不會參與事務。
  • 對一個 NULL

    感到驚訝。
  • 你不能將一個
  • NULL

    類型掃描成變量,除非它是database/sql 套件提供的NullXXX 類型之一(或者是你自己製作的,或者是驅動提供的),否則。仔細檢查您的模式,因為如果一個列可以是 NULL,那麼總有一天它會變成 NULL,而在測試中有效的內容可能會在生產中崩潰。 原文網址:https://orangematter.solarwinds.com/2017/03/23/common-pitfalls-when-using-database-sql-in-go/

    翻譯網址:https://learnku.com/go/t/50966
#

以上是使用database/sql時應避免掉進這11個坑 ! (Go 資料庫)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
與GO接口鍵入斷言和類型開關與GO接口鍵入斷言和類型開關May 02, 2025 am 12:20 AM

Gohandlesinterfacesandtypeassertionseffectively,enhancingcodeflexibilityandrobustness.1)Typeassertionsallowruntimetypechecking,asseenwiththeShapeinterfaceandCircletype.2)Typeswitcheshandlemultipletypesefficiently,usefulforvariousshapesimplementingthe

使用errors.is和錯誤。使用errors.is和錯誤。May 02, 2025 am 12:11 AM

Go語言的錯誤處理通過errors.Is和errors.As函數變得更加靈活和可讀。 1.errors.Is用於檢查錯誤是否與指定錯誤相同,適用於錯誤鏈的處理。 2.errors.As不僅能檢查錯誤類型,還能將錯誤轉換為具體類型,方便提取錯誤信息。使用這些函數可以簡化錯誤處理邏輯,但需注意錯誤鏈的正確傳遞和避免過度依賴以防代碼複雜化。

在GO中進行性能調整:優化您的應用程序在GO中進行性能調整:優化您的應用程序May 02, 2025 am 12:06 AM

tomakegoapplicationsRunfasterandMorefly,useProflingTools,leverageConCurrency,andManageMoryfectily.1)usepprofforcpuorforcpuandmemoryproflingtoidentifybottlenecks.2)upitizegorizegoroutizegoroutinesandchannelstoparalletaparelalyizetasksandimproverperformance.3)

GO的未來:趨勢和發展GO的未來:趨勢和發展May 02, 2025 am 12:01 AM

go'sfutureisbrightwithtrendslikeMprikeMprikeTooling,仿製藥,雲 - 納蒂維德象,performanceEnhancements,andwebassemblyIntegration,butchallengeSinclainSinClainSinClainSiNgeNingsImpliCityInsImplicityAndimimprovingingRornhandRornrorlling。

了解Goroutines:深入研究GO的並發了解Goroutines:深入研究GO的並發May 01, 2025 am 12:18 AM

goroutinesarefunctionsormethodsthatruncurranceingo,啟用效率和燈威量。 1)shememanagedbodo'sruntimemultimusingmultiplexing,允許千sstorunonfewerosthreads.2)goroutinessimproverentimensImproutinesImproutinesImproveranceThroutinesImproveranceThrountinesimproveranceThroundinesImproveranceThroughEasySytaskParallowalizationAndeff

了解GO中的初始功能:目的和用法了解GO中的初始功能:目的和用法May 01, 2025 am 12:16 AM

purposeoftheInitfunctionoIsistoInitializeVariables,setUpConfigurations,orperformneccesSetarySetupBeforEtheMainFunctionExeCutes.useInitby.UseInitby:1)placingitinyourcodetorunautoamenationally oneraty oneraty oneraty on inity in ofideShortAndAndAndAndForemain,2)keepitiTshortAntAndFocusedonSimImimpletasks,3)

了解GO界面:綜合指南了解GO界面:綜合指南May 01, 2025 am 12:13 AM

Gointerfacesaremethodsignaturesetsthattypesmustimplement,enablingpolymorphismwithoutinheritanceforcleaner,modularcode.Theyareimplicitlysatisfied,usefulforflexibleAPIsanddecoupling,butrequirecarefulusetoavoidruntimeerrorsandmaintaintypesafety.

從恐慌中恢復:何時以及如何使用recover()從恐慌中恢復:何時以及如何使用recover()May 01, 2025 am 12:04 AM

在Go中使用recover()函數可以從panic中恢復。具體方法是:1)在defer函數中使用recover()捕獲panic,避免程序崩潰;2)記錄詳細的錯誤信息以便調試;3)根據具體情況決定是否恢復程序執行;4)謹慎使用,以免影響性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版