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

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

嘗試將字符串轉換為實例變量

嘗試將字符串轉換為實例變量

Go
HUH函數 2021-11-08 10:21:17
我是 GO 語言的新手。嘗試通過構建真實的 Web 應用程序來學習 GO。我正在使用 Revel 框架。這是我的資源路線:GET     /resource/:resource                     Resource.ReadAllGET     /resource/:resource/:id                 Resource.ReadPOST    /resource/:resource                     Resource.CreatePUT     /resource/:resource/:id                 Resource.UpdateDELETE  /resource/:resource/:id                 Resource.Delete例如:GET /resource/users 電話 Resource.ReadAll("users")這是我的資源控制器(現在只是一個虛擬操作):type Resource struct {    *revel.Controller}type User struct {    Id int    Username string    Password string}type Users struct {}func (u Users) All() string {        return "All"}func (c Resource) ReadAll(resource string) revel.Result {    fmt.Printf("GET %s", resource)    model := reflect.New(resource)    fmt.Println(model.All())    return nil}我正在嘗試通過將資源字符串轉換為對象來調用All函數來獲取用戶結構的實例。和錯誤:不能使用資源(類型字符串)作為類型reflect.Type in參數來reflect.New:字符串沒有實現reflect.Type(缺少Align方法)我是 GO 新手,請不要評判我 :)
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

你的問題在這里:


model := reflect.New(resource)

您不能以這種方式從字符串實例化類型。您需要在那里使用開關并根據型號執行操作:


switch resource {

case "users":

    model := &Users{}

    fmt.Println(model.All())

case "posts":

    // ...

}

或者reflect正確使用。就像是:


var types = map[string]reflect.Type{

    "users": reflect.TypeOf(Users{}) // Or &Users{}.

}


// ...


model := reflect.New(types[resource])

res := model.MethodByName("All").Call(nil)

fmt.Println(res)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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