You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang调用AWS Lambda时传递2个参数的正确实现方法

Go调用AWS Lambda传递多参数的正确实现

InvokeInput的Payload字段仅接受单份JSON序列化后的字节数组,你之前尝试的新增多Payload字段、拼接序列化字节数组的方式都不符合Lambda的参数传递规范,正确的做法是将所有参数封装到同一个复合结构中,再整体做JSON序列化。

1. 调用端实现步骤

  • 首先定义参数封装结构体,也可以直接使用map[string]interface{},自定义结构体更便于后续维护:
type LambdaSearchParams struct {
    SearchValue string `json:"search_value"`
    SearchField string `json:"search_field"`
}
  • 修改原调用逻辑,将两个参数封装后再序列化:
func (s *resourceService) GetProjectByField(ctx context.Context, searchValue string, searchField string) projectStruct {
    // 封装两个参数到统一结构体
    params := LambdaSearchParams{
        SearchValue: searchValue,
        SearchField: searchField,
    }
    // 整体序列化参数
    payload, err := json.Marshal(params)
    if err != nil {
        panic(err.Error())
    }

    util.Logger.Debugf("Payload: %s", payload)
    invokeOutput, err := s.lambdaSvc.Invoke(ctx, &lambda.InvokeInput{
        FunctionName:   &s.getProject,
        InvocationType: "RequestResponse",
        Payload:        payload,
    })
    if err != nil {
        panic(err.Error())
    }
    var project projectStruct
    err = json.Unmarshal(invokeOutput.Payload, &project)
    if err != nil {
        panic(err.Error())
    }

    util.Logger.Debugf("Invocation output [%v]", invokeOutput)
    return project
}

2. Lambda端对应修改

需要同步修改Lambda函数的入参解析逻辑,直接反序列化收到的Payload为对应的结构即可,如果你的Lambda也是Go写的,参考示例:

type LambdaSearchParams struct {
    SearchValue string `json:"search_value"`
    SearchField string `json:"search_field"`
}

func handler(ctx context.Context, params LambdaSearchParams) (projectStruct, error) {
    // 直接调用params.SearchValue和params.SearchField执行业务逻辑即可
    // ...
}

如果你的Lambda是其他语言开发的,只要对应把收到的event解析为包含search_value和search_field两个字段的对象即可。

注意:调用端和Lambda端的JSON字段名必须完全对应,否则会出现参数解析为空的问题。

内容的提问来源于stack exchange,提问作者Julian Cisneros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:27:03