Golang Go语言中关于sqlc的问题:当我修改query之后造成go结构体字段的变化,如何自定义?
表 1 有两个字段挪到 表 2 上了. 之前的 query.sql 是这样的:
select * from t1
sqlc 生成的结构体是这样的:
type Haha struct {
...
Username string `json:"username"`
Password string `json:"password"`
...
}
现在的 query.sql 长这样:
select t1.*, t2.*
from t1
left join t2
on t1.id=t2.pid
生成的结构体变这样了:
type Haha struct {
Username sql.NullString `json:"username"`
Password sql.NullString `json:"password"`
}
sql.NullString 这是个结构体, 导致我所有的业务代码都要改. 请问有没有什么办法能让他变回 string?
t2 join t1 这种方法不行. 因为我还有一些其他字段依赖 t1 相当于没解决问题.
sqlc 是否有针对这种情况进行考虑? config 中的 rename 感觉是全局修改, 自定义性不强.
第二个问题是各位大佬在使用 sqlc 的过程中, 针对表结构和 query.sql 的修改是如何设计的?
谢谢
Golang Go语言中关于sqlc的问题:当我修改query之后造成go结构体字段的变化,如何自定义?
更多关于Golang Go语言中关于sqlc的问题:当我修改query之后造成go结构体字段的变化,如何自定义?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
临时是这样解决的. 但是总感觉怪怪的.sql<br>select t1.*, t2.*,<br>t2.username::varchar(255) AS username,<br>t2."password"::varchar(255) AS "password",<br>from t1<br>left join t2<br>on <a target="_blank" href="http://t1.id" rel="nofollow noopener">t1.id</a>=t2.pid<br><br>
更多关于Golang Go语言中关于sqlc的问题:当我修改query之后造成go结构体字段的变化,如何自定义?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中使用sqlc时,如果你修改了SQL查询并希望自定义生成的结构体字段,可以通过在SQL注释中使用@name
和@type
指令来实现。这些指令允许你控制sqlc生成的代码,使其更符合你的需求。
- 使用
@name
指令:当你想为生成的结构体字段指定一个自定义名称时,可以在SQL查询中使用@name
指令。例如,如果你的查询返回一个名为user_id
的列,但你希望在Go中使用UserID
作为字段名,可以这样做:
-- name: GetUser :one
SELECT id AS user_id, name
FROM users
WHERE id = $1;
然后在生成的代码中,你会看到UserID
而不是UserId
或user_id
。
- 使用
@type
指令:如果你需要指定一个自定义的类型,可以使用@type
指令。这在处理枚举或特殊类型时特别有用。例如:
-- name: GetStatus :one
-- type: StatusType
SELECT status_code, status_description
FROM statuses
WHERE id = $1;
然后,在你的Go代码中,你需要定义StatusType
结构体:
type StatusType struct {
StatusCode int
StatusDescription string
}
通过这些指令,你可以精确地控制sqlc为你生成的结构体,确保它们与你的Go代码风格和业务逻辑保持一致。在修改查询后,记得重新运行sqlc以生成最新的代码。