小编Kar*_*njs的帖子

Go - 使用 pgtypes 的正确方法

我正在开发一个简单的Go服务来连接到数据库以进行基本查询。我用来sqlc生成Go与数据库交互的函数。lib/pq当从现在切换驱动程序时,pgx/v5数据库字段的类型而pgtypes不是Go类型。这是一个例子:

而不是这个:

    type ListAccountsParams struct {
        Owner  string `json:"owner"`
        Limit  int32  `json:"limit"`
        Offset int32  `json:"offset"`
    }
Run Code Online (Sandbox Code Playgroud)

我现在明白了:

    type ListAccountsParams struct {
        Owner  pgtype.Text `json:"owner"`
        Limit  pgtype.Int4 `json:"limit"`
        Offset pgtype.Int4 `json:"offset"`
    }
Run Code Online (Sandbox Code Playgroud)

然而我发现使用的唯一方法pgtypes是这个:

    owner := pgtype.Text{
        String: "Craigs List",
        Valid: true,
    }
Run Code Online (Sandbox Code Playgroud)

而不是仅仅做owner := "Craigs List"。对于数字类型就更矫枉过正了,我找到的所有实现都是这样的:

    pgtype.Numeric{
    Int: big.NewInt(-543), 
    Exp: 3, 
    Status: pgtype.Present
    }
Run Code Online (Sandbox Code Playgroud)

使用sqlc配置文件,我可以覆盖这些类型以支持标准类型,但对我来说必须覆盖 postgres类型等等Go是没有意义的......textstring

在我看来,这不是使用这些类型的最佳方式,这对我来说是违反直觉的。所以我的问题是,我做得对吗?有不同的方法吗?最终,有没有一种方法可以配置 …

go libpq pgx sqlc

6
推荐指数
1
解决办法
862
查看次数

标签 统计

go ×1

libpq ×1

pgx ×1

sqlc ×1