键入
response的
rw.WriteHeader(response.Status)是
interface{}。在Go中,您需要显式声明基础结构的类型,然后访问该字段:func JSON(rw http.ResponseWriter, response interface{}) { payload, _ := json.MarshalIndent(response, "", " ") switch r := response.(type) { case ErrorResponse: rw.WriteHeader(r.Status) case Response: rw.WriteHeader(r.Status) } ...}但是,更好的方法是为响应定义一个通用接口,该接口具有一种获取响应状态的方法:
type Statuser interface { Status() int}// You need to rename the fields to avoid name collision.func (r Response) Status() int { return r.ResStatus }func (r ErrorResponse) Status() int { return r.ResStatus }func JSON(rw http.ResponseWriter, response Statuser) { payload, _ := json.MarshalIndent(response, "", " ") rw.WriteHeader(response.Status()) ...}而且最好重新命名
Response,以
DataResponse和
ResponseInterface到
Response,IMO。



