gpt4 book ai didi

go - 尝试注入(inject)依赖项时出错

转载 作者:IT王子 更新时间:2023-10-29 02:24:51 24 4
gpt4 key购买 nike

我正在尝试重构一些代码以对 Docker client library 使用依赖注入(inject)我在我的代码中使用。我用我希望能够模拟的方法创建了一个接口(interface)

type DockerClient interface {
Ping(context.Context) (types.Ping, error)
}

func NewDockerUtil() (*DockerUtil, error) {
var dockerClient *DockerClient
var err error
dockerClient, err = client.NewEnvClient() //Reports incompatible types in binary and unary expressions.
if err != nil {
return nil, err
}
return &DockerUtil{
Client: dockerClient,
}, nil
}

type DockerUtil struct{
Client *DockerClient
}

但是当我尝试分配它时,我得到 Reports incompatible types in binary and unary expressions. 我到底需要更改什么?

最佳答案

让我们从使用interface{}开始,定义接口(interface)时不要使用指针定义,good read here .

type DockerUtil struct{
Client DockerClient
}

还有白鲸Client实现了很多方法,你想为选择性方法做 interface

Right way to do is via Type assertion. Good read Effective Go - Type assertions and Spec - Type assertion.

注意:试试这段代码,我的机器上没有docker env来测试。

func NewDockerUtil() (*DockerUtil, error) {
dockerClient, err := client.NewEnvClient()
if err != nil {
return nil, err
}
return &DockerUtil{
Client: dockerClient.(DockerClient),
}, nil
}

注意:

使用 DockerUtil.Client,您只能调用 Ping 方法,因为您的接口(interface) DockerClient 定义了 Ping方法。


如果您想稍后调用client.Client 支持的所有方法,那么您必须进行类型断言-

dockerClient := DockerUtil.Client.(*client.Client)

关于go - 尝试注入(inject)依赖项时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45024152/

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