feat: add prepared statements in Go
parent
5ea0aa74b7
commit
427caae9f0
1
Makefile
1
Makefile
|
@ -7,6 +7,7 @@ all:
|
|||
$(MAKE) format
|
||||
$(MAKE) gen
|
||||
$(MAKE) format-html
|
||||
$(MAKE) srht
|
||||
|
||||
test:
|
||||
go test -race -failfast ./...
|
||||
|
|
|
@ -551,6 +551,15 @@ internal
|
|||
correctly is time consuming. So just stick to plain SQL. It is easier to
|
||||
debug when something is wrong.
|
||||
</p>
|
||||
<p>
|
||||
Also please use
|
||||
<a href="https://go.dev/doc/database/prepared-statements" rel="nofollow"
|
||||
>prepared statement</a
|
||||
>
|
||||
as much as possible. Idealy, we should init all prepared statement when we
|
||||
init database connection to cached it, not create it every time we need
|
||||
it.
|
||||
</p>
|
||||
<p>
|
||||
But <code>database/sql</code> has its own limit. For example, it is hard
|
||||
to get primary key after insert/update. So may be you want to use ORM for
|
||||
|
@ -635,6 +644,30 @@ internal
|
|||
<li><code>Loc</code> to <code>time.UTC</code>.</li>
|
||||
<li><code>CheckConnLiveness</code> to true.</li>
|
||||
</ul>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-connect-sqlite-with-moderncorgsqlite"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
href="#connect-sqlite-with-moderncorgsqlite"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Connect SQLite with
|
||||
<a href="https://gitlab.com/cznic/sqlite" rel="nofollow"
|
||||
>modernc.org/sqlite</a
|
||||
>
|
||||
</h3>
|
||||
<p>Remember to config:</p>
|
||||
<ul>
|
||||
<li>Write-Ahead Logging: <code>PRAGMA journal_mode=WAL</code></li>
|
||||
<li>
|
||||
Disable connections pool with <code>SetMaxOpenConns</code> sets to 1
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Don't use
|
||||
<a href="https://github.com/mattn/go-sqlite3">mattn/go-sqlite3</a>, it's
|
||||
required <code>CGO_ENABLED</code>.
|
||||
</p>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-connect-kafka-with-shopifysarama"
|
||||
|
@ -859,6 +892,13 @@ fieldalignment -fix ./internal/business/<span class="pl-k">*</span>.go</pre>
|
|||
>Speed Up GoMock with Conditional Generation</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://turriate.com/articles/making-sqlite-faster-in-go"
|
||||
rel="nofollow"
|
||||
>Making SQLite faster in Go</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
|
|
|
@ -275,6 +275,9 @@ To learn and use those libs correctly is time consuming.
|
|||
So just stick to plain SQL.
|
||||
It is easier to debug when something is wrong.
|
||||
|
||||
Also please use [prepared statement](https://go.dev/doc/database/prepared-statements) as much as possible.
|
||||
Idealy, we should init all prepared statement when we init database connection to cached it, not create it every time we need it.
|
||||
|
||||
But `database/sql` has its own limit.
|
||||
For example, it is hard to get primary key after insert/update.
|
||||
So may be you want to use ORM for those cases.
|
||||
|
@ -333,6 +336,15 @@ Remember to config:
|
|||
- `Loc` to `time.UTC`.
|
||||
- `CheckConnLiveness` to true.
|
||||
|
||||
### Connect SQLite with [modernc.org/sqlite](https://gitlab.com/cznic/sqlite)
|
||||
|
||||
Remember to config:
|
||||
|
||||
- Write-Ahead Logging: `PRAGMA journal_mode=WAL`
|
||||
- Disable connections pool with `SetMaxOpenConns` sets to 1
|
||||
|
||||
Don't use [mattn/go-sqlite3](https://github.com/mattn/go-sqlite3), it's required `CGO_ENABLED`.
|
||||
|
||||
### Connect Kafka with [Shopify/sarama](https://github.com/Shopify/sarama)
|
||||
|
||||
Don't use [confluentinc/confluent-kafka-go](https://github.com/confluentinc/confluent-kafka-go), it's required `CGO_ENABLED`.
|
||||
|
@ -428,3 +440,4 @@ gofmt -w -r '"github.com/Sirupsen/logrus" -> "github.com/sirupsen/logrus"' *.go
|
|||
- [Fixing Memory Exhaustion Bugs in My Golang Web App](https://mtlynch.io/notes/picoshare-perf/)
|
||||
- [Prevent Logging Secrets in Go by Using Custom Types](https://www.commonfate.io/blog/prevent-logging-secrets-in-go-by-using-custom-types)
|
||||
- [Speed Up GoMock with Conditional Generation](https://jonwillia.ms/2019/12/22/conditional-gomock-mockgen)
|
||||
- [Making SQLite faster in Go](https://turriate.com/articles/making-sqlite-faster-in-go)
|
||||
|
|
Loading…
Reference in New Issue