登录
首页 >  Golang >  Go问答

Go语言中,结构内嵌接口的含义是什么?

来源:stackoverflow

时间:2024-03-19 09:54:30 428浏览 收藏

在 Go 语言中,结构体嵌入接口是一种将接口类型作为结构体成员的方式。当一个结构体嵌入一个接口时,该结构体就隐式实现了该接口。这意味着结构体具有接口中定义的所有方法,而无需显式实现它们。 嵌入接口的目的是将接口的特性添加到结构体中,从而增强结构体的功能和灵活性。通过嵌入接口,结构体可以访问接口定义的方法,并可以被作为该接口的类型来使用。这在需要创建具有不同行为或功能的结构体时非常有用,因为嵌入接口允许结构体根据需要灵活地更改其行为。

问题内容

这里是新人。我遇到了一些与 dynamodb 相关的代码:

type Dynamo interface {
    DescribeTableWithContext(
        aws.Context,
        *dynamodb.DescribeTableInput,
        ...request.Option,
    ) (*dynamodb.DescribeTableOutput, error)
}

type my_struct struct {
    Dynamo
}

我假设 my_struct“实现”dynamo 接口并且现在可以使用 describetablewithcontext 方法是否正确?


解决方案


不完全是。无论您为 dynamo 嵌入初始化 my_struct 的结构是什么,都将实现接口。然而,my_struct 将在编译时满足 dynamo 接口。但正如 @mkopriva 指出的那样,在运行时,这确实需要嵌入式接口的具体实现。所以如果你要做这样的事情:

package main

import "fmt"

type adder interface {
    func add(a, b int) int
}

type embed struct {
    adder
}

func printadd(a adder, first, second int) {
    fmt.println(a.add(first, second))
}

func main() {
    e := embed{}
    printadd(e, 1, 2)
}

此代码可以编译,但在运行时,对 printadd 的调用将失败,因为尚未设置嵌入式接口实现。

如果将上面的 main 替换为:

type adder struct {}

func (a adder) Add(first, second int) int {
     return first + second
}

func main() {
    e := Embed{adder{}}
    PrintAdd(e, 1, 2)
}

事情会按预期进行。

是的,假设您在初始化期间提供了接口实现。

编辑:添加了对实现接口与仅仅满足接口的含义的解释。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>