sqlc源码分析

Posted golang算法架构leetcode技术php

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlc源码分析相关的知识,希望对你有一定的参考价值。

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 :oneSELECT * FROM authorsWHERE 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.gofunc (q *Queries) CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error)func (q *Queries) DeleteAuthor(ctx context.Context, id int64) errorfunc (q *Queries) GetAuthor(ctx context.Context, id int64) (Author, error)func (q *Queries) ListAuthors(ctx context.Context) ([]Author, error)

    其中Queriessqlc封装的一个结构。

    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 语句需要返回受影响的行数。



以上是关于sqlc源码分析的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段

《Docker 源码分析》全球首发啦!

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段