不能将 &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)
.
我正在尝试像这样获得一个新的 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)
.