不能将 &cfg(类型 *aws.Config 的值)用作 session.NewSession 参数中的 *aws.Config 值

cannot use &cfg (value of type *aws.Config) as *aws.Config value in argument to session.NewSession

我正在尝试像这样获得一个新的 AWS 会话:

cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
    log.Fatal(err)
}

awsSession, err := session.NewSession(&cfg)
if err != nil {
    log.Fatal(err)
}

但我遇到了一个令人困惑的(至少对我而言)错误:

cannot use &cfg (value of type *aws.Config) as *aws.Config value in argument to session.NewSession

NewSession() 的签名如下所示:

func NewSession(cfgs ...*aws.Config) (*Session, error)

NewSession() 是可变函数这一事实是否在产生此错误中发挥了作用?

如果我像这样传递文字 aws.Config{},为什么错误会消失?

awsSession, err := session.NewSession(&aws.Config{})

您混淆了 AWS SDK 版本。

session 存在于 AWS SDK v1 中,导入路径为 github.com/aws/aws-sdk-go/aws/session,需要 "github.com/aws/aws-sdk-go/aws".Config 类型的参数。它不存在于 AWS SDK v2.

您从中加载配置的 config 包来自 AWS SDK v2,导入路径为 github.com/aws/aws-sdk-go-v2/config 因此 LoadDefaultConfigs returns "github.com/aws/aws-sdk-go-v2/config".Config

它们不是同一类型,编译器会告诉您这一点(尽管有部分有用的错误消息)。

您必须保持您的 AWS SDK 版本一致。使用 v2,您应该使用配置而不是会话来实例化特定的 AWS 服务。例如 s3.New(&cfg).