
https://github.com/kyleconroy/sqlc
database/sql标准库提供的都是比较底层的接口。我们需要编写大量重复的代码。sqlc可以根据我们编写的 SQL 语句生成类型安全的、地道的 Go 接口代码,我们要做的只是调用这些方法。
安装:
$ go get github.com/kyleconroy/sqlc/cmd/sqlc对应的数据库驱动:
$ go get github.com/go-sql-driver/mysql编写 SQL 语句。在schema.sql文件中编写建表语句
query.sql文件中编写查询语句
-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = $1 LIMIT 1;sqlc支持 PostgreSQL 和 MySQL,不过对 MySQL 的支持是实验性的。很多语法是不支持的,比如in
sqlc额外只需要一个小小的配置文件sqlc.yaml:
version: "1"
packages:
- name: "db"
path: "./db"
queries: "./query.sql"
schema: "./schema.sql"version:版本;packages:name:生成的包名;path:生成文件的路径;queries:查询 SQL 文件/路径;schema:建表 SQL 文件/路径sqlc generate 生成对应代码
1,模型对象结构:// models.go
type Author struct {
ID int64
Name string
Bio sql.NullString
}2,操作接口:
// query.sql.go
func (q *Queries) CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error)
func (q *Queries) DeleteAuthor(ctx context.Context, id int64) error
func (q *Queries) GetAuthor(ctx context.Context, id int64) (Author, error)
func (q *Queries) ListAuthors(ctx context.Context) ([]Author, error)其中Queries是sqlc封装的一个结构。
3,调用
queries := db.New(db)
authors, err := queries.ListAuthors(context.Background())生成的代码在包db下(由packages.name选项指定),首先调用db.New()将sql.Open()的返回值sql.DB作为参数传入,得到Queries对象。
除了 SQL 语句本身,sqlc需要我们在编写 SQL 语句的时候通过注释的方式为生成的程序提供一些基本信息。语法为:
-- name: <name> <cmd>name为生成的方法名,如上面的CreateAuthor/ListAuthors/GetAuthor/DeleteAuthor等,cmd可以有以下取值:
:one:表示 SQL 语句返回一个对象,生成的方法的返回值为(对象类型, error),对象类型可以从表名得出;:many:表示 SQL 语句会返回多个对象,生成的方法的返回值为([]对象类型, error);:exec:表示 SQL 语句不返回对象,只返回一个error;:execrows:表示 SQL 语句需要返回受影响的行数。本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!