search
HomeBackend DevelopmentGolangAvoid falling into these 11 pitfalls when using database/sql! (Go database)

The following column will introduce you to these 11 pitfalls that you should avoid falling into when using database/sql. I hope it will be helpful to friends in need!

We are big fans of the Avoid falling into these 11 pitfalls when using database/sql! (Go database) language and its database access library

database/sqlAvoid falling into these 11 pitfalls when using database/sql! (Go database). As you can probably see with your own eyes,

database/sql

is very small in size, but you can do a lot with it. This includes substantial risks of error and deceptive error. This blog post is dedicated to some of the mistakes we’ve made in the past, in the hope that you won’t make the same mistakes again. Common Pitfalls

Delay within a loop.
    Long-lived functions have queries within the loop, and delaying
  • rows.Close()

    within the loop will cause memory and connection usage to grow without limit.

    Open many
  • db
  • objects.

    Please create a global sql.DB and do not open a new one for every incoming HTTP request your API server should respond to. Otherwise, you will be opening and closing a lot of TCP connections to the database. TIME_WAIT State latency, load and TCP connections are heavy.

    Do not do
  • rows.Close()
  • after the operation is completed.

    Forgetting to close the rows variable means a connection leak. Combined with the increasing load on the server, this may mean encountering max_connections errors or similar. Please run rows.Close() as soon as possible, even if it will be used again later (which is also harmless). Chain db.QueryRow() and .Scan() for the same reason.

    Prepared statement bloat.
  • If your code is running with high concurrency, consider whether prepared statements are the right solution, as they may be re-prepared multiple times on different connections when the connection is busy.
  • strconv or casts clutter the code.
  • It is recommended to scan the results into a variable of the type you want and let
  • .Scan()

    do the conversion for you behind the scenes.

    Error handling and retries lead to confusing code.
  • Let
  • database/sql

    handle the connection pooling, reconnection and retry logic for you.

    Forgot to check for errors after
  • rows.Next()
  • .

    Don't forget, rows.Next() The loop may exit abnormally.

    Use
  • db.Query()
  • for non-SELECT queries.

    If there is no result set, do not tell Avoid falling into these 11 pitfalls when using database/sql! (Go database) that you wish to iterate over the result set, otherwise the connection will be leaked.

    Assume that subsequent statements use the same connection.
  • If two statements are run consecutively, they are likely to be run on two different connections. Run
  • LOCK TABLES tbl1 WRITE

    , then run SELECT * FROM tbl1, and you will most likely block and wait. If you need to ensure that a single statement is used, you need to use the parameter sql.Tx.

    Access the database while using TX.
  • sql.Tx

    is bound to a transaction, but the database is not bound, so accessing it will not participate in a transaction.

    Surprised at a
  • NULL
  • .

    You cannot scan a NULL type into a variable unless it is one of the NullXXX types provided by the database/sql package (or you make it yourself , or provided by the driver), otherwise. Check your schema carefully, because if a column can be NULL, then one day it will become NULL, and what works in test may break in production.

    Original address: https://orangematter.solarwinds.com/2017/03/23/common-pitfalls-when-using-database-sql-in-go/
Translation address: https://learnku.com/go/t/50966

The above is the detailed content of Avoid falling into these 11 pitfalls when using database/sql! (Go database). For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:learnku. If there is any infringement, please contact admin@php.cn delete
go语言有没有缩进go语言有没有缩进Dec 01, 2022 pm 06:54 PM

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言为什么叫gogo语言为什么叫goNov 28, 2022 pm 06:19 PM

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

一文浅析Golang中的闭包一文浅析Golang中的闭包Nov 21, 2022 pm 08:36 PM

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。 换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。 闭包会随着函数的创建而被同时创建。

聊聊Golang中的几种常用基本数据类型聊聊Golang中的几种常用基本数据类型Jun 30, 2022 am 11:34 AM

本篇文章带大家了解一下golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。

一文详解Go中的并发【20 张动图演示】一文详解Go中的并发【20 张动图演示】Sep 08, 2022 am 10:48 AM

Go语言中各种并发模式看起来是怎样的?下面本篇文章就通过20 张动图为你演示 Go 并发,希望对大家有所帮助!

【整理分享】一些GO面试题(附答案解析)【整理分享】一些GO面试题(附答案解析)Oct 25, 2022 am 10:45 AM

本篇文章给大家整理分享一些GO面试题集锦快答,希望对大家有所帮助!

tidb是go语言么tidb是go语言么Dec 02, 2022 pm 06:24 PM

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言是否需要编译go语言是否需要编译Dec 01, 2022 pm 07:06 PM

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools