sqlc将 SQL 编译为类型安全的 Go

联合创作 · 2023-10-02 00:52

sqlc 从 SQL 生成完全类型安全的成语 Go 代码。下面是它的工作原理:

  • 你使用 SQL 编写查询。
  • 你运行 sqlc 以生成具有这些查询的类型安全接口的代码。
  • 你编写调用生成代码的应用程序代码。

sqlc 可以使用这个 SQL:

CREATE TABLE authors (
  id   BIGSERIAL PRIMARY KEY,
  name text      NOT NULL,
  bio  text
);

-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = $1 LIMIT 1;

并自动生成以下 Go 代码:

package db

import (
  "context"
  "database/sql"
)

type Author struct {
  ID   int64
  Name string
  Bio  sql.NullString
}

const getAuthor = `-- name: GetAuthor :one
SELECT id, name, bio FROM authors
WHERE id = $1 LIMIT 1
`

type Queries struct {
  db *sql.DB
}

func (q *Queries) GetAuthor(ctx context.Context, id int64) (Author, error) {
  row := q.db.QueryRowContext(ctx, getAuthor, id)
  var i Author
  err := row.Scan(&i.ID, &i.Name, &i.Bio)
  return i, err
}

 sqlc 的灵感来自 PugSQL 和 HugSQL。

浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报