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 开发?
先提前感谢大佬们和前辈们的指教!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.