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

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

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

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

Go

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

Q&A

解決済

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

nyonyosuke
nyonyosuke

総合スコア73

Amazon SQS

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

Go

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

1回答

0グッド

0クリップ

1020閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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

総合スコア3261

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Amazon SQS

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

Go

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