我讀了很多關于 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。
2 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
或者你可以嘗試可變參數解析,比如 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
}
}
}
- 2 回答
- 0 關注
- 177 瀏覽
添加回答
舉報
0/150
提交
取消