gpt4 book ai didi

go - 在 Golang 中,在结构内部使用接口(interface)是什么意思?

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

新来这里。我遇到了一些与 DynamoDB 相关的代码:

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

type my_struct struct {
Dynamo
}
我是否正确假设 my_struct “实现” Dynamo 接口(interface),现在可以使用 DescribeTableWithContext方法?

最佳答案

Am I correct in assuming my_struct "implements" the Dynamo interface


不完全是。无论你初始化什么结构 my_structDynamo embed 将是实现接口(interface)的东西。 my_struct然而将满足 Dynamo编译时的接口(interface)。正如@mkopriva 指出的那样,在运行时,这确实需要嵌入式接口(interface)的具体实现。因此,如果您要执行以下操作:
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将失败,因为尚未设置嵌入式接口(interface)实现。
如果将上面的 main 替换为:
type adder struct {}

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

func main() {
e := Embed{adder{}}
PrintAdd(e, 1, 2)
}
事情将按预期进行。

...and now can use the DescribeTableWithContext method?


是的,假设您在初始化期间提供了接口(interface)实现。
编辑:添加了对实现接口(interface)与仅仅满足它的含义的解释。

关于go - 在 Golang 中,在结构内部使用接口(interface)是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63533173/

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