当前位置: 首页 > 面试题库 >

如何访问接口属性

上官高逸
2023-03-14
问题内容

我打算在两个响应结构的标头和主体中同时使用HTTP状态代码。不要在没有设置状态码的情况下将其设置为功能参数的两倍,并再次为结构设置以避免冗余。

该参数responseJSON()是允许两个结构被接受的接口。编译器将引发以下异常:

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)
    ...
}

问题答案:

键入responserw.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,以DataResponseResponseInterfaceResponse,IMO。



 类似资料:
  • 问题内容: 我有一个像这样的对象: 现在,当我尝试访问键“ 0”的值时,例如: …我遇到了错误。(也许这不是正确的方法吗?) 如何访问数字键的值(如上)? 问题答案: 这应该工作: (是的替代语法。) 您会收到此错误,因为在JavaScript中,标识符不能以数字开头。 JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript

  • 问题内容: 我正在尝试远程监控在docker中运行的JVM。配置如下所示: 机器1:在ubuntu机器上的docker中运行JVM(以我为例,运行kafka);本机的IP为10.0.1.201; 在docker中运行的应用程序位于172.17.0.85。 机器2:运行JMX监视 请注意,当我从机器2运行JMX监视时,它会失败,并显示以下错误(注意:当我运行jconsole,jvisualvm,jm

  • 我有一个核心项目,处理常见问题并应用方面,称为“common”。服务项目将此核心项目用于常见流程。 我必须在“通用”中管理异常处理,并且我必须从通用的属性文件中读取消息。但是服务也可以有自定义消息。 所以我把一条消息放在共同点上 } 共同点是,我有common-messages.properties 允许将服务命名为service\u 1,该服务依赖于Common。 Service\u 1还有Se

  • 问题内容: 是否可以从函数范围内访问python函数对象属性? 例如让我们 现在,如果要返回_x属性内容“ foo”,则必须是什么?如果有可能(简单) 谢谢 更新: 我也想做以下工作: 更新2: 声明不可能(如果是这种情况),以及为什么,比提供一种方法来伪造它更令人满意,例如使用不同于函数的对象 问题答案: 解 使函数的默认参数之一成为对函数本身的引用。 用法示例: 说明 原始张贴者想要一种不需要

  • 问题内容: 如何访问组件的属性。我以为会在this.props中,但事实并非如此。 例如 并在产品列表中 退货 没有任何关键属性。我可以创建另一个属性并为其分配相同的值,但是由于key属性已经被使用,因此这似乎是多余的。 另外,键属性在整个组件中是否必须是唯一的,还是仅在其要呈现的循环或集合中是唯一的? 问题答案: 该属性由React在后台使用,并且不会暴露给您。您将要使用自定义属性并将该数据传递

  • 问题内容: 我正在尝试编写一个访问USB端口以读取和写入通过USB连接的设备的Java应用程序。我面临的问题是,我不知道在Java中究竟要使用什么来做这样的事情。我在网上搜索,发现有一个叫的东西,但所有帖子看起来都相当老。 目前,我正在使用这些库,但有时会遇到一些同步错误。当我使用C#进行等效操作时,它需要的代码要少得多,而且我不会遇到任何相同的同步错误。 我的问题是, JRE的最新版本中是否包含