亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么控制器中的 Revel 可選 func 參數不起作用?CRUD 代碼冗余

為什么控制器中的 Revel 可選 func 參數不起作用?CRUD 代碼冗余

Go
繁星coding 2021-10-11 18:48:48
我讀了很多關于 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

        }

    }

}


查看完整回答
反對 回復 2021-10-11
  • 2 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號