我正在阅读很多关于 Go 的文章,发现我在方法或函数中不能有可选参数(某些参数也不能有默认值)。让我们以简单的CRUD为例。
我想使用相同的控制器操作来创建和更新,只是为了简单:
func (c Account) User(user models.User, verifyPassword string, id ...int64) {
/*
validate user etc
*/
if len(id) > 0 {
c.Txn.Update(&model)
} else{
c.Txn.Insert(&model)
}
}
当我尝试{{ url "Account.User" }}
在模板中执行时,我收到一条错误消息,提示我缺少参数。一旦我对路由值进行硬编码,我就会在代码的未知部分上有一些无效的内存地址或 nil 指针取消引用。
如果没有可选/默认参数,我将拥有我不想要的 CRUD 代码冗余!
因此,我将不得不为同一件事使用两个函数,而不是一个函数,这两个函数仅在一行代码中有所不同。
自从我 7 天前开始学习 Go 和 Revel 以来,也许我错过了一些东西。我使用 Go 和 Revel 的唯一原因是为了速度。我将它用于一些有很多请求(每天数百万)的项目。
有没有办法解决这个问题?
更新
第一个问题是视图:{{ url "Account.User" }}
当我这样使用它时,它说:
missing parameter id for route Account.User in func (c Account) User(user models.User, verifyPassword string, id ...int64)
所以这更像是一个 Revel 问题,然后是 Go。