我是 Go 的新手,无论如何我都不是经验丰富的开发人员,所以请随意抨击。我正在尝试创建一个将驻留在容器中并从 AWS SQS 读取的 GO 应用程序。目标是应用程序长期存在并不断从队列中读取。这是我目前作为示例使用的代码。我最大的问题是这是否是对 GOTO 的错误使用,是否有更好的方法。先感谢您package mainimport ( "context" "fmt" "log" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/sqs")const ( maxMessages = 1)func GetQueueURL(cfg aws.Config, queue string) (*sqs.GetQueueUrlOutput, error) { sqsClient := sqs.NewFromConfig(cfg) result, err := sqsClient.GetQueueUrl(context.TODO(), &sqs.GetQueueUrlInput{ QueueName: &queue, }) if err != nil { return nil, err } return result, nil}func GetMessages(cfg aws.Config, queueUrl string, maxMessages int32) (*sqs.ReceiveMessageOutput, error) { sqsClient := sqs.NewFromConfig(cfg) msgResult, err := sqsClient.ReceiveMessage(context.TODO(), &sqs.ReceiveMessageInput{ QueueUrl: &queueUrl, MaxNumberOfMessages: maxMessages, WaitTimeSeconds: 10, }) if err != nil { return nil, err } return msgResult, nil}func main() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { log.Fatal("error") } queueName := "queue" res, err := GetQueueURL(cfg, queueName) if err != nil { fmt.Printf("Got an error receiving url: %v", err) } FINDMESSAGE: msgRes, err := GetMessages(cfg, *res.QueueUrl, maxMessages) if err != nil { fmt.Printf("Got an error while trying to retrieve messages: %v", err) } if len(msgRes.Messages) != 0 { fmt.Println("Message Body: " + *msgRes.Messages[0].Body) fmt.Println("Message Handle: " + *msgRes.Messages[0].ReceiptHandle) } fmt.Println("No Messages") goto FINDMESSAGE}
1 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
我最大的问题是这是否是对 GOTO 的错误使用,是否有更好的方法。
对 的任何使用goto都是对 的错误使用goto,除非您可以表达为什么使用 goto。你的例子是一个 for 循环:
for {
msgRes, err := GetMessages(cfg, *res.QueueUrl, maxMessages)
if err != nil {
fmt.Printf("Got an error while trying to retrieve messages: %v", err)
}
if len(msgRes.Messages) != 0 {
fmt.Println("Message Body: " + *msgRes.Messages[0].Body)
fmt.Println("Message Handle: " + *msgRes.Messages[0].ReceiptHandle)
}
fmt.Println("No Messages")
}
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报
0/150
提交
取消