Golang中SQS的GetQueueAttributesInput使用指南

Golang中SQS的GetQueueAttributesInput使用指南 尝试获取 AWS SQS 队列的属性。我刚开始使用 Go SDK v2。在编译时遇到以下错误:

无法将 *string{...}(类型 *string)用作字段值中的类型 "github.com/aws/aws-sdk-go-v2/service/sqs/types".QueueAttributeName

正在执行的代码如下:

params := &sqs.GetQueueAttributesInput{
              QueueUrl: aws.String(queueUrl[i]),
              AttributeNames: []*string{
                          aws.String("QueueArn"),
              },
}
resp, err := client.GetQueueAttributes(context.TODO(), params)

这是 Go AWS SDK v1/v2 的问题吗?关于如何修复有什么想法吗?任何帮助都将不胜感激。


更多关于Golang中SQS的GetQueueAttributesInput使用指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

错误提示指出,您不应使用字符串指针切片,而应使用 types.QueueAttributeName 类型的切片。

您的 AWS 库很可能附带了一些预定义的常量,其中一个是用于 QueueArn 的。

更多关于Golang中SQS的GetQueueAttributesInput使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 AWS SDK for Go v2 中,GetQueueAttributesInputAttributeNames 字段类型已从 v1 的 []*string 更改为 []types.QueueAttributeName。你需要使用预定义的常量而不是字符串字面量。

以下是修正后的代码示例:

import (
    "context"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/service/sqs"
    "github.com/aws/aws-sdk-go-v2/service/sqs/types"
)

params := &sqs.GetQueueAttributesInput{
    QueueUrl: aws.String(queueUrl[i]),
    AttributeNames: []types.QueueAttributeName{
        types.QueueAttributeNameQueueArn,
    },
}
resp, err := client.GetQueueAttributes(context.TODO(), params)

可用的属性名常量包括:

  • types.QueueAttributeNameAll
  • types.QueueAttributeNamePolicy
  • types.QueueAttributeNameVisibilityTimeout
  • types.QueueAttributeNameMaximumMessageSize
  • types.QueueAttributeNameMessageRetentionPeriod
  • types.QueueAttributeNameApproximateNumberOfMessages
  • types.QueueAttributeNameApproximateNumberOfMessagesNotVisible
  • types.QueueAttributeNameCreatedTimestamp
  • types.QueueAttributeNameLastModifiedTimestamp
  • types.QueueAttributeNameQueueArn
  • types.QueueAttributeNameApproximateNumberOfMessagesDelayed
  • types.QueueAttributeNameDelaySeconds
  • types.QueueAttributeNameReceiveMessageWaitTimeSeconds
  • types.QueueAttributeNameRedrivePolicy
  • types.QueueAttributeNameFifoQueue
  • types.QueueAttributeNameContentBasedDeduplication
  • types.QueueAttributeNameKmsMasterKeyId
  • types.QueueAttributeNameKmsDataKeyReusePeriodSeconds
  • types.QueueAttributeNameDeduplicationScope
  • types.QueueAttributeNameFifoThroughputLimit
  • types.QueueAttributeNameRedriveAllowPolicy
  • types.QueueAttributeNameSqsManagedSseEnabled

如果需要获取所有属性,可以使用:

params := &sqs.GetQueueAttributesInput{
    QueueUrl: aws.String(queueUrl[i]),
    AttributeNames: []types.QueueAttributeName{
        types.QueueAttributeNameAll,
    },
}

这个类型变更确保了编译时的类型安全,避免了使用无效的属性名字符串。

回到顶部