gpt4 book ai didi

go - 为什么 Controller 中的 Revel 可选功能参数不起作用? CRUD 代码冗余

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:31 27 4
gpt4 key购买 nike

我阅读了很多有关 Go 的文章,发现我不能在方法或函数中使用可选参数(某些参数也不能使用默认值)。让我们举个简单的例子CRUD .

我想使用相同的 Controller 操作来创建和更新,只是为了简单:

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"}} 时,我收到一条错误消息,说我缺少参数。一旦我对路由的值进行硬编码,我就会在代码的未知部分出现一些无效的内存地址或零指针取消引用。

如果没有可选/默认参数,我将拥有我不想要的 CRUD 代码冗余!

因此,我将不得不为同一件事使用两个函数,而不是一个函数,它们仅在一行代码中有所不同。

自从我 7 天前开始学习 Go 和 Revel 以来,也许我错过了什么。我使用 Go 和 Revel 的唯一原因是速度。我将它用于一些有很多请求的项目(每天数百万)。

有什么办法可以解决吗?

更新

第一个问题在 View 上:{{ url "Account.User"}}

当我这样使用它时,它说:

missing parameter id for route Account.User in func (c Account) User(user models.User, verifyPassword string, id ...int64)

所以这比 Go 更像是 Revel 问题。

最佳答案

或者您可以尝试可变参数解析,例如 Python 如何使用 *args

func (c Account) User(args ...interface{}) {

for _, arg := range args {
switch v := arg.(type) {
case models.User:
// validate user
case string:
// verify password
case []int64:
if len(v) > 0 {
c.Txn.Update(&model)
} else {
c.Txn.Insert(&model)
}
default:
// some default stuff
}
}
}

关于go - 为什么 Controller 中的 Revel 可选功能参数不起作用? CRUD 代码冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com