我是 Go 的新手,无论如何我都不是经验丰富的开发人员,所以请随意抨击。
我正在尝试创建一个将驻留在容器中并从 AWS SQS 读取的 GO 应用程序。目标是应用程序长期存在并不断从队列中读取。
这是我目前作为示例使用的代码。我最大的问题是这是否是对 GOTO 的错误使用,是否有更好的方法。
先感谢您
package main
import (
"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
}
小怪兽爱吃肉
相关分类