Closed1
github.com/ncruces/go-sqlite3でSELECT sqlite_version();

なかったので
TODO: あとで記事にしたい
- wazeroを使ったCGOフリーなSQLiteライブラリ
- ベンチマークはgithub.com/cvilsmeier/go-sqlite-bench。全体的にmodernc.org/sqliteより早くgithub.com/mattn/go-sqlite3より遅い
- 使い方はREADME.md読むかpkg.go.dev読む。Examplesおすすめ
- DiscussionsのQ&Aも助かる
package main
import (
"fmt"
"log"
"github.com/ncruces/go-sqlite3"
_ "github.com/ncruces/go-sqlite3/embed"
)
func main() {
db, err := sqlite3.Open(":memory:")
if err != nil {
log.Fatal(err)
}
defer db.Close()
stmt, _, err := db.Prepare("SELECT sqlite_version()")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
for stmt.Step() {
fmt.Println(stmt.ColumnText(0))
}
}
Conn構造体使ったやつ
- Pros: SQL文以外で使えるSQLiteの機能やwazeroのオプションが使える
- Cons: ソースコードや公式ドキュメント以外の参考資料がない
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/ncruces/go-sqlite3/driver"
_ "github.com/ncruces/go-sqlite3/embed"
)
func main() {
db, err := sql.Open("sqlite3", ":memory:")
if err != nil {
log.Fatal(err)
}
defer db.Close()
var v string
db.QueryRow("SELECT sqlite_version()").Scan(&v)
fmt.Println(v)
}
database/sql
使ったやつ
- Pros: 公式以外のソースコードやドキュメントが豊富で書きやすい
- Cons: SQL文以外で使えるSQLiteの機能やwazeroのオプションが使えない
package main
import (
"context"
"database/sql"
"fmt"
"log"
_ "github.com/ncruces/go-sqlite3/driver"
_ "github.com/ncruces/go-sqlite3/embed"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/sqlitedialect"
)
func main() {
ctx := context.Background()
sqldb, err := sql.Open("sqlite3", ":memory:")
if err != nil {
log.Fatal(err)
}
db := bun.NewDB(sqldb, sqlitedialect.New())
var v string
if err := db.NewSelect().ColumnExpr("sqlite_version()").Scan(ctx, &v); err != nil {
log.Fatal(err)
}
fmt.Println(v)
}
Bun使ったやつ
Pros: ORMで書きやすい
Cons: SQL文以外で使えるSQLiteの機能やwazeroのオプションが使えない
このスクラップは2025/01/19にクローズされました