aws-sdk-v2 中 Go 的接口重新声明:正确吗?

发布于 2025-01-10 23:30:29 字数 569 浏览 0 评论 0原文

在 Go 的 aws-sdk-v2 库中,我们有以下接口定义:(

type Retryer interface {
    GetInitialToken() (releaseToken func(error) error)
}


type RetryerV2 interface {
    Retryer
    
    GetInitialToken() (releaseToken func(error) error)
}

代码位于:https://github.com/aws/aws-sdk-go-v2/blob/main/aws/retryer.go)

这会导致编译错误:

aws/retryer.go:81: GetInitialToken redeclared (compile)

这段代码是否正确?是否可以重新声明接口中的函数? 我该如何解决这个问题?

In aws-sdk-v2 library for Go, we have the following interfaces definitions:

type Retryer interface {
    GetInitialToken() (releaseToken func(error) error)
}


type RetryerV2 interface {
    Retryer
    
    GetInitialToken() (releaseToken func(error) error)
}

(the code is here: https://github.com/aws/aws-sdk-go-v2/blob/main/aws/retryer.go)

This causes compilation error:

aws/retryer.go:81: GetInitialToken redeclared (compile)

Is this code correct or not? Is it possible to redeclare function in of interfaces?
How am I supposed to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悍妇囚夫 2025-01-17 23:30:29

您可能使用的是旧版本的 Go。从 Go 1.14 开始允许重叠方法集,并且代码在 Go Playground 上编译。

引用自 Go 1.14 发布日志:

根据重叠接口提案 ,Go 1.14 现在允许嵌入具有重叠方法集的接口:嵌入接口中的方法可能与(嵌入)接口中已存在的方法具有相同的名称和相同的签名。这解决了菱形嵌入图通常(但不排他)出现的问题。接口中显式声明的方法必须像以前一样保持唯一

如果您发布的代码出现编译时错误,则表明您使用的是 1.14 之前的 Go。紧急更新!请注意,仅支持最后 2 个主要版本(当前为 1.17 和 1.16)。你使用像 1.13 这样的版本是一个很大的风险!

Likely you are using an old version of Go. Overlapping method sets are allowed since Go 1.14, and the code compiles on the Go Playground.

Quoting from Go 1.14 release log:

Per the overlapping interfaces proposal, Go 1.14 now permits embedding of interfaces with overlapping method sets: methods from an embedded interface may have the same names and identical signatures as methods already present in the (embedding) interface. This solves problems that typically (but not exclusively) occur with diamond-shaped embedding graphs. Explicitly declared methods in an interface must remain unique, as before.

If you get a compile-time error for the code you posted, that suggests you're using a Go prior to 1.14. Urgently update! Please note that only the last 2 major versions are supported (currently 1.17 and 1.16). You using a version like 1.13 is a major risk!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文