package controllers
import (
"encoding/json"
"errors"
"io"
"io/ioutil"
"reflect"
)
func GetTypeFromReq(c *App, ty interface{}) (interface{}, error) {
//get the type we are going to marshall into
item := reflect.ValueOf(ty)
//define and set the error that we will be returning to null
var retErr error
retErr = nil
//extract the body from the request and defer closing of the body
body, err := ioutil.ReadAll(io.LimitReader(c.Request.Body, 1048576))
defer c.Request.Body.Close()
//handle errors and unmarshal our data
if err != nil {
retErr = errors.New("Failed to Read body: " + err.Error())
} else if err = json.Unmarshal(body, &item); err != nil {
retErr = errors.New("Unmarshal Failed: " + err.Error())
}
return item, retErr
}
タイプとリクエストを関数に渡し、その関数内でリクエストを変数にアンマーシャリングして返します。golangのJSONに一般的にリクエストをマーシャリングする方法
私は私がこれを行うにしようとするので、私のアプローチは間違っていると仮定します。
inter, err := GetTypeFromReq(&c, models.User{})
if err != nil {
revel.ERROR.Println(err.Error())
}
user := inter.(models.User)
私はエラーを取得:
「インタフェース変換インタフェースは、{} reflect.Value、ないmodels.Userです」どのようにこれに近づくためのヒント?
本当にありがとう、ありがとうございます。 –
完了しました。私は思った。 –