为了账号安全,请及时绑定邮箱和手机立即绑定

接口作为结构中的字段,接口调用将输入作为同一结构的方法

接口作为结构中的字段,接口调用将输入作为同一结构的方法

Go
HUH函数 2023-08-07 14:38:28
就我而言,“RequestHandlerProxy”是一个结构,其字段为接口“IAdapter”,并且接口有许多要调用的方法,该方法的输入为结构“RequestHandlerProxy”。请帮助我如何处理这个?如何定义结构“RequestHandlerProxy”的值并传递?以下是我的接口结构和方法: 接口“IAdapter”位于文件“adapters”中type RequestHandlerProxy struct {    TestMode       bool    coreInstanceId string    adapter        adapters.IAdapter    coreProxy      adapterif.CoreProxy}func NewRequestHandlerProxy(coreInstanceId string, iadapter adapters.IAdapter, cProxy adapterif.CoreProxy) *RequestHandlerProxy {    var proxy RequestHandlerProxy    proxy.coreInstanceId = coreInstanceId    proxy.adapter = iadapter    proxy.coreProxy = cProxy    return &proxy}func (rhp *RequestHandlerProxy) Adapter_descriptor() (*empty.Empty, error) {    return new(empty.Empty), nil    }func (rhp *RequestHandlerProxy) Device_types() (*voltha.DeviceTypes, error) {    return nil, nil}func (rhp *RequestHandlerProxy) Health() (*voltha.HealthStatus, error) {        return nil, nil}以下是我在适配器文件中的界面:type IAdapter interface {    Adapter_descriptor() error    Device_types() (*voltha.DeviceTypes, error)    Health() (*voltha.HealthStatus, error)}
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您提供的代码有点难以理解(不完整且目的不清楚),因此这里是一个简化的示例,希望能够回答您的问题。RequestHandlerProxy请注意,从问题标题来看,我假设实现该接口的事实IAdapter让您感到困惑;这可能是无关紧要的(可能还有其他函数接受 an ,在其中传递 a或您自己的实现IAdapter是有意义的,如下所示)。RequestHandlerProxyIAdapteradaptImpl

我已简化IAdapter为包含单个函数并将所有内容都放在一个文件中。要扩展它以在您的示例中工作,您将需要实现所有三个函数(Adapter_descriptor()Device_types()Health())。代码可以在go Playground中运行(如果这不能回答您的问题,也许您可以修改该代码以提供问题的简化示例)。

package main

import "errors"


// IAdapter - Reduced to one function to make this simple

type IAdapter interface {

    Adapter_descriptor() error

}


/// NewRequestHandlerProxy - Simplified version of the New function

func NewRequestHandlerProxy(iadapter IAdapter) {

    return // code removed to make example simple

}


// adaptImpl - Implements the IAdapter interface

type adaptImpl struct {

    isError bool // example only

}


// Adapter_descriptor - Implement the function specified in the interface

func (a adaptImpl) Adapter_descriptor() error {

    if a.IsError {

        return errors.New("An error happened")

    }

    return nil

}


func main() {

    // Create an adaptImpl which implements IAdapter 

    x := adaptImpl{isError: true}

    NewRequestHandlerProxy(x)

}


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信