php editor Baicao brings you questions about AWS Lambda in golang this time. When triggering a Lambda function using AWS SQS, a type error may occur. This problem may cause the Lambda function to be unable to process SQS messages normally, causing unnecessary trouble to developers. In this article, we will explore the causes of this problem and provide solutions to help developers successfully solve this type error dilemma.
Question content
I am developing a lambda triggered by api gateway and sqs.
package main import ( "context" "fmt" "log" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" regcode "company/gateway/lambda/regcode/lib" ) func main() { // start the lambda function with both sqs and lambda url handlers lambda.start(func(ctx context.context, event interface{}) error { fmt.println("event type: ", event) switch event.(type) { case events.sqsevent: return regcode.handlersqs(ctx, event.(events.sqsevent)) case events.apigatewayproxyrequest: response, err := regcode.handlerlambdaurl(ctx, event.(events.apigatewayproxyrequest)) if err != nil { log.println(err) return err } log.printf("api gateway response: %v", response) return nil default: return fmt.errorf("unknown event type: %t", event) } }) }
But my switch type doesn't recognize when using sqs or apigateway events. It always belongs to the default statement. For example, for sqs I'm using this event:
{ "records": [ { "messageid": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78", "receipthandle": "messagereceipthandle", "body": "hello from sqs!", "attributes": { "approximatereceivecount": "1", "senttimestamp": "1523232000000", "senderid": "123456789012", "approximatefirstreceivetimestamp": "1523232000001" }, "messageattributes": {}, "md5ofbody": "{{{md5_of_body}}}", "md5ofmessageattributes": "test", "eventsource": "aws:sqs", "eventsourcearn": "arn:aws:sqs:us-east-1:123456789012:myqueue", "awsregion": "us-east-1" } ] }
and received this message:
unknown event type: map[string]interface {}: errorstring
Any idea what I did wrong? I'm new to using golang so I'm lost here.
Additionally, I tried sending the event directly to regcode.handlersqs
but I got a type conversion error. like this:
func main() { // Start the Lambda function with both SQS and Lambda URL handlers lambda.Start(func(ctx context.Context, event interface{}) error { sqsEvent, _ := event.(SQSEvent) // ... }) }
sqsevent is empty.
Solution
Any idea what I'm doing wrong?
TheAWS lambda handler will reflect the types of the parameters in the func
and then create an event
type that matches your signature.
So if you declare the second parameter of func
as event events.SQSEvent
, AWS will get its type events.SQSEvent
, creating this an object and pass it in.
Likewise, if you were to use event events.APIGatewayProxyRequest
in func
, AWS will reflect that event
should be events.APIGatewayProxyRequest
and create it.
In other words, AWS does not check whether the incoming request comes from SQS or API. This is only determined based on your handler's signature. So if you use an event interface{}
in a func
, AWS will create exactly what you specified to create, which is the interface{}
, not any other types.
This is why your switch doesn't work. The easiest way to solve this problem is to use two lambda functions, one for SQS and one for the API.
The above is the detailed content of aws lambda in golang triggered by sqs with type error. For more information, please follow other related articles on the PHP Chinese website!

The core features of Go include garbage collection, static linking and concurrency support. 1. The concurrency model of Go language realizes efficient concurrent programming through goroutine and channel. 2. Interfaces and polymorphisms are implemented through interface methods, so that different types can be processed in a unified manner. 3. The basic usage demonstrates the efficiency of function definition and call. 4. In advanced usage, slices provide powerful functions of dynamic resizing. 5. Common errors such as race conditions can be detected and resolved through getest-race. 6. Performance optimization Reuse objects through sync.Pool to reduce garbage collection pressure.

Go language performs well in building efficient and scalable systems. Its advantages include: 1. High performance: compiled into machine code, fast running speed; 2. Concurrent programming: simplify multitasking through goroutines and channels; 3. Simplicity: concise syntax, reducing learning and maintenance costs; 4. Cross-platform: supports cross-platform compilation, easy deployment.

Confused about the sorting of SQL query results. In the process of learning SQL, you often encounter some confusing problems. Recently, the author is reading "MICK-SQL Basics"...

The relationship between technology stack convergence and technology selection In software development, the selection and management of technology stacks are a very critical issue. Recently, some readers have proposed...

Golang ...

How to compare and handle three structures in Go language. In Go programming, it is sometimes necessary to compare the differences between two structures and apply these differences to the...

How to view globally installed packages in Go? In the process of developing with Go language, go often uses...

What should I do if the custom structure labels in GoLand are not displayed? When using GoLand for Go language development, many developers will encounter custom structure tags...


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

SublimeText3 English version
Recommended: Win version, supports code prompts!

Zend Studio 13.0.1
Powerful PHP integrated development environment

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Mac version
God-level code editing software (SublimeText3)