V2EX 的朋友们大家好。
目前我正在学习 GO 语言,是个入门小白,试着从应用的角度去学习 GO 语言,想先从 web 开发入手去做一些有意思的后台应用。
于是我挑选了 Fiber 作为 web 框架,XORM 作为数据库(目前只涉及 mysql )的交互框架。
当我试着基于数据库去做一些查询功能时,我懵逼了。
我需要根据一个结构体参数( Java 中叫参数对象)中是否有某个字段来决定我的 sql 中的 where 条件中是否要有这个筛选条件。
例如下面这段代码片段:
type Param struct {
UserId int64
Type int
StartTime time.Time
EndTime time.Time
}
session := engine.Where("is_delete = 0")
// userId 不为空时
if param.UserId != 0 {
session.And("user_id = ?", param.UserId)
}
我一开始尝试着写 param.UserId != nil 幸好有编译器告诉我这是错误的写法,我只能摈弃继承于 Java 的编程思想。可是现在问题来了,我如何区分,到底这个 0 是来自默认赋值,还是用户真的输入了一个 0 呢?
或者说有什么优雅的方法能解决我的这种场景么?还是说 golang 真的存在某些局限性不适合做 web 开发?
先提前感谢大佬们和前辈们的指教!