我的意图是在两个响应结构的头部和主体中使用HTTP状态码。如果没有设置状态码两次作为函数参数,并且再次为结构设置以避免冗余。如何访问接口的属性
参数response
的JSON()
是一个接口,允许两个结构被接受。编译器会抛出以下异常:
response.Status undefined (type interface {} has no field or method Status)
因为响应字段不能有状态属性。有没有其他方法来避免设置状态码两次?
type Response struct {
Status int `json:"status"`
Data interface{} `json:"data"`
}
type ErrorResponse struct {
Status int `json:"status"`
Errors []string `json:"errors"`
}
func JSON(rw http.ResponseWriter, response interface{}) {
payload, _ := json.MarshalIndent(response, "", " ")
rw.WriteHeader(response.Status)
...
}
感谢您的解决方案。现在是否更好,因此将状态代码设置为新参数两次并在结构中设置两次,或者编写两个新函数和一个实现相同的接口? – user3147268
nit:'DataResponse'可能比'OKResponse'好。 'Status()int'接口的另一个名字是'Statuser'或者'Status'(前者听起来不正确,但是这样的''er'非字接口有优先权。 –
Thanks @ Dave-C。稍微改变了答案。 –