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

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

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


泛舟湖上清波郎朗
浏览 86回答 1
1回答

有只小跳蛙

您可能正在使用旧版本的 Go。从 Go 1.14 开始允许重叠方法集,并且代码在Go Playground上编译。引用Go 1.14 发布日志:根据重叠接口提案,Go 1.14 现在允许嵌入具有重叠方法集的接口:来自嵌入式接口的方法可能与(嵌入)接口中已经存在的方法具有相同的名称和相同的签名。这解决了菱形嵌入图通常(但不限于)出现的问题。接口中显式声明的方法必须像以前一样保持唯一。如果您发布的代码出现编译时错误,则表明您使用的是 1.14 之前的 Go。紧急更新!请注意,仅支持最后 2 个主要版本(当前为 1.17 和 1.16)。您使用 1.13 之类的版本存在重大风险!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go