Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api golang中单阵列的多响应_Api_Go_Response_Go Gin - Fatal编程技术网

Api golang中单阵列的多响应

Api golang中单阵列的多响应,api,go,response,go-gin,Api,Go,Response,Go Gin,我是刚来戈朗的。我想得到我的回答作为多重结果。我有一些方法,但我需要改变 impartErrl := ph.profileService.ValidateSchema(gojsonschema.NewStringLoader(string(b))) if impartErrl != nil { ctx.JSON(http.StatusBadRequest, impart.ErrorResponse(impartErrl)) retu

我是刚来戈朗的。我想得到我的回答作为多重结果。我有一些方法,但我需要改变

impartErrl := ph.profileService.ValidateSchema(gojsonschema.NewStringLoader(string(b)))
        if impartErrl != nil {
            ctx.JSON(http.StatusBadRequest, impart.ErrorResponse(impartErrl))
            return
        }




现在我得到的输出是

[
    {
        "error": "validation error",
        "msg": "email: Does not match format 'email' ",
        "key": "email"
    },
    {
        "error": "validation error",
        "msg": "screenName: String length must be greater than or equal to 4 ",
        "key": "screenName"
    }
]
但我需要我的回应

{
     0 :{
            "error": "validation error",
            "msg": "email: Does not match format 'email' ",
            "key": "email"
        },
    1 : {
        "error": "unable to complete the request",
        "msg": "invalid screen name, must be alphanumeric characters only",
        "key": "screen_name"
    }

}
我怎样才能得到这些类型的响应?因为在ios应用程序中解析响应[]时显示错误。所以我需要改变输出


请帮助我。

函数
错误响应
应该返回
映射[int]错误
,而不是
[]错误
。例如:

func ErrorResponse(err interface{}) map[int]Error {
    errorResponse := map[int]Error{}
    switch e := err.(type) {
    case Error:
        errorResponse[0] = e
    case []Error:
        for i, k := range e {
            errorResponse[i] = k
        }
    default:
        errorResponse[0] = NewError(ErrUnknown, fmt.Sprintf("%v", err))
    }
    return errorResponse
}


因此,
ErrorResponse
应该返回一个
map[int32]错误,而不是
[]错误
?我要检查两件事:1)在封送前,
encoding/json
对映射的键进行排序,如果没有,2)出现在自然排序顺序之外的键不会破坏“ios应用程序”。我之所以提到这一点,是因为在Go中,映射遍历并不能保证其键的访问顺序。@Matteo使用它,我得到了所需的输出。@Matteo非常感谢您
type Error interface {
    error
    HttpStatus() int
    ToJson() string
    Err() error
    Msg() string
}
[
    {
        "error": "validation error",
        "msg": "email: Does not match format 'email' ",
        "key": "email"
    },
    {
        "error": "validation error",
        "msg": "screenName: String length must be greater than or equal to 4 ",
        "key": "screenName"
    }
]
{
     0 :{
            "error": "validation error",
            "msg": "email: Does not match format 'email' ",
            "key": "email"
        },
    1 : {
        "error": "unable to complete the request",
        "msg": "invalid screen name, must be alphanumeric characters only",
        "key": "screen_name"
    }

}
func ErrorResponse(err interface{}) map[int]Error {
    errorResponse := map[int]Error{}
    switch e := err.(type) {
    case Error:
        errorResponse[0] = e
    case []Error:
        for i, k := range e {
            errorResponse[i] = k
        }
    default:
        errorResponse[0] = NewError(ErrUnknown, fmt.Sprintf("%v", err))
    }
    return errorResponse
}