Есть несколько незначительных вещей, которые я изменил, и затем это работает
Во-первых, log.Print(request.body)
не компилируется для меня, но использование request.Body
хорошо
Во-вторых, тип, который выиспользуется для запроса
// APIGatewayProxyRequest contains data coming from the API Gateway proxy
type APIGatewayProxyRequest struct {
Resource string `json:"resource"` // The resource path defined in API Gateway
Path string `json:"path"` // The url path for the caller
HTTPMethod string `json:"httpMethod"`
Headers map[string]string `json:"headers"`
QueryStringParameters map[string]string `json:"queryStringParameters"`
PathParameters map[string]string `json:"pathParameters"`
StageVariables map[string]string `json:"stageVariables"`
RequestContext APIGatewayProxyRequestContext `json:"requestContext"`
Body string `json:"body"`
IsBase64Encoded bool `json:"isBase64Encoded,omitempty"`
}
и в этом теле это поле "тело", которое является строкой.Таким образом, изменение ваших тестовых данных на
{
"body": "HELLO"
}
даст некоторые данные, которые проходят через
Наконец, параметры для обработчика во всех примерах, кажется, включают объект контекста, поэтому я добавил, что
func Handler(ctx context.Context, request events.APIGatewayProxyRequest)
Вот полная версия вашей программы, которая «сработала для меня»
package main
import (
"context"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"log"
"net/http"
)
func Handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
//These log statements return empty regardless of JSON input.
log.Print(request.Body)
return events.APIGatewayProxyResponse{
StatusCode: http.StatusOK,
Body: request.Body}, nil
}
func main() {
lambda.Start(Handler)
}