我是 Go 的新手,無論如何我都不是經(jīng)驗豐富的開發(fā)人員,所以請隨意抨擊。我正在嘗試創(chuàng)建一個將駐留在容器中并從 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條經(jīng)驗 獲得超1個贊
我最大的問題是這是否是對 GOTO 的錯誤使用,是否有更好的方法。
對 的任何使用goto都是對 的錯誤使用goto,除非您可以表達為什么使用 goto。你的例子是一個 for 循環(huán):
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 關注
- 103 瀏覽
添加回答
舉報
0/150
提交
取消