gpt4 book ai didi

go - 接口(interface)作为结构中的字段,接口(interface)调用将输入作为相同结构的方法

转载 作者:行者123 更新时间:2023-12-01 22:37:22 28 4
gpt4 key购买 nike

在我的例子中,“RequestHandlerProxy”是一个结构,其字段为接口(interface)“IAdapter”,接口(interface)有可能被调用的方法,该方法的输入为结构“RequestHandlerProxy”。请帮我解决这个问题?如何定义值以构造“RequestHandlerProxy”并通过?

下面是我的接口(interface)结构和方法:接口(interface)“IAdapter”在文件“适配器”中

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

最佳答案

您提供的代码有点难以理解(不完整且目的不明),所以这里有一个简化的示例,希望能回答您的问题。请注意,从问题标题中,我假设 RequestHandlerProxy实现接口(interface)IAdapter让你困惑;这可能是无关紧要的(可能有其他函数接受 IAdapter,其中传入 RequestHandlerProxy 或您自己的 IAdapter 实现是有意义的,例如下面的 adaptImpl)。

我已简化 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)
}

关于go - 接口(interface)作为结构中的字段,接口(interface)调用将输入作为相同结构的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59026269/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com