質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon SQS

Amazon SQS(Amazon Simple Queue Service)は、AWSが提供している分散型メッセージキューイングサービスです。APIを用いてアクセスすることが可能。これによって、アプリケーションのメイン処理と非同期に動いてほしい処理を分離することができます。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

1853閲覧

GoでSQSからメッセージを取得したい

nyonyosuke

総合スコア73

Amazon SQS

Amazon SQS(Amazon Simple Queue Service)は、AWSが提供している分散型メッセージキューイングサービスです。APIを用いてアクセスすることが可能。これによって、アプリケーションのメイン処理と非同期に動いてほしい処理を分離することができます。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2022/11/25 13:43

GoでAWS SQSからメッセージを取得しようとしています。

sqs.go

1type SQSManager struct { 2 Svc *sqs.SQS 3 QueueUrl string 4 QueueName string 5 WaitTimeSeconds int64 6} 7func New(QueueUrl, QueueName string, WaitTimeSeconds int) *SQSManager { 8 sqsClient := &SQSManager{&sqs.SQS{}, QueueUrl, QueueName, int64(WaitTimeSeconds)} 9 return sqsClient 10} 11func (m *SQSManager) RetrieveMessage() ([]*sqs.Message, error) { 12 13 input := &sqs.ReceiveMessageInput{ 14 QueueUrl: aws.String(m.GetQueueUrl()), 15 MaxNumberOfMessages: aws.Int64(10), 16 WaitTimeSeconds: aws.Int64(m.WaitTimeSeconds), 17 } 18 19 fmt.Println(input) 20 resp, err := m.Svc.ReceiveMessage(input) 21 22 if err != nil { 23 return nil, err 24 } 25 26 return resp.Messages, nil 27}

mainから呼び出します

mail.go

1func main() { 2 cfg := config.InitEnvironment() 3 sqsClient := sqs.New(cfg.SQS.URL, cfg.SQS.NAME, 30) 4 msg, err := sqsClient.RetrieveMessage() 5 if err != nil { 6 fmt.Println(err) 7 } 8 fmt.Println(msg) 9}

上記の内容で下記のエラーが出てしまいます。下記の内容からnilに対してデータを入れようとしていると思っているのですが具体的にどこを直せばよいのかが分からず、教えていただければと思います。
なおSQSにはデータが入っていることを確認しています。
mail_sender | panic: runtime error: invalid memory address or nil pointer dereference

mail_sender | { mail_sender | MaxNumberOfMessages: 10, mail_sender | QueueUrl: "http://localhost:4566/000000000000/send-message-queue", mail_sender | WaitTimeSeconds: 30 mail_sender | } mail_sender | panic: runtime error: invalid memory address or nil pointer dereference mail_sender | [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x220964] mail_sender | mail_sender | goroutine 1 [running]: mail_sender | github.com/aws/aws-sdk-go/aws/client.(*Client).NewRequest(...) mail_sender | /go/pkg/mod/github.com/aws/aws-sdk-go@v1.44.144/aws/client/client.go:86 mail_sender | github.com/aws/aws-sdk-go/service/sqs.(*SQS).newRequest(0x400019fd38?, 0xb4198?, {0x26b440?, 0x40000942a0?}, {0x2540e0?, 0x40000b42a0?}) mail_sender | /go/pkg/mod/github.com/aws/aws-sdk-go@v1.44.144/service/sqs/service.go:96 +0x34 mail_sender | github.com/aws/aws-sdk-go/service/sqs.(*SQS).ReceiveMessageRequest(0x7a?, 0x40000942a0) mail_sender | /go/pkg/mod/github.com/aws/aws-sdk-go@v1.44.144/service/sqs/api.go:1457 +0xc0 mail_sender | github.com/aws/aws-sdk-go/service/sqs.(*SQS).ReceiveMessage(0x47bb68?, 0x40000b6008?) mail_sender | /go/pkg/mod/github.com/aws/aws-sdk-go@v1.44.144/service/sqs/api.go:1527 +0x1c mail_sender | datadriven/src/infra/sqs.(*SQSManager).RetrieveMessage(0x400019fea8) mail_sender | /go/src/src/infra/sqs/sqs.go:52 +0x1a4 mail_sender | main.main() mail_sender | /go/src/main.go:14 +0xf8 mail_sender | exit status 2 mail_sender exited with code 1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「&sqs.SQS{}」このインスタンスのつくり方が間違っています。
「"github.com/aws/aws-sdk-go/service/sqs".New(p client.ConfigProvider, cfgs ...*aws.Config) *SQS」を使って作るべきです。

投稿2022/12/02 00:17

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問