你正在写 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 分开,您可以获得以下优势:
- IDE 或代码编辑器提供了更好的支持(因为您现在正在自己的文件中处理 SQL 代码及其扩展名.sql)。
- 您的 DBA 将能够轻松找到您的项目正在运行的每个查询的代码。
- SQL重用,只需将相同的.sql文件从一个项目复制到另一个项目即可。
- 保持你的 Go 代码没有 SQL 查询。
sqload是一个具有 100% 测试覆盖率的库,没有
来自第三方的依赖,他们的文档有很多例子。
sqload的灵感来自 Yesql(Clojure)。
标签:Go,SQL,源代码,代码,阅读,修改,解决,编写 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。