编程语言
首页 > 编程语言> > 停止在 Go 源文件中编写 SQL 代码!

停止在 Go 源文件中编写 SQL 代码!

作者:互联网

你正在写 Go,但你需要写一些 SQL,所以你最终在你的 Go 源代码中编写 SQL,只要它们是短查询,这不是问题,但是当你的查询占用更多的代码行时,它们变得难以阅读和修改,除了缺乏缩进和代码着色使情况变得更糟。

所以。。。解决方案是什么?

将 SQL 代码保留为 SQL,将 Go 代码保留为 Go(不要在 Go 中编写 SQL)。

为此,您可以使用sqload

File users.sql

-- query: FindUserById
SELECT first_name,
       last_name,
       dob,
       email
  FROM user
 WHERE id = :id;

-- query: UpdateFirstNameById
UPDATE user
   SET first_name = :first_name
 WHERE id = :id;

-- query: DeleteUserById
DELETE FROM user WHERE id = :id;

File main.go

package main

import (
    _ "embed"
    "fmt"

    "github.com/midir99/sqload"
)

//go:embed users.sql
var sqlCode string

var Q = sqload.MustLoadFromString[struct {
    FindUserById        string `query:"FindUserById"`
    UpdateFirstNameById string `query:"UpdateFirstNameById"`
    DeleteUserById      string `query:"DeleteUserById"`
}](sqlCode)

func main() {
    fmt.Printf("- FindUserById\n%s\n\n", Q.FindUserById)
    fmt.Printf("- UpdateFirstNameById\n%s\n\n", Q.UpdateFirstNameById)
    fmt.Printf("- DeleteUserById\n%s\n\n", Q.DeleteUserById)
}

通过将 SQL 和 Go 分开,您可以获得以下优势:

sqload是一个具有 100% 测试覆盖率的库,没有
来自第三方的依赖,他们的文档有很多例子。

sqload的灵感来自 Yesql(Clojure)。

标签:Go,SQL,源代码,代码,阅读,修改,解决,编写
来源: