我想发送lambda工作所需的两个参数,它基本上需要我想要搜索的值,以及作为第二个参数的查找该值的字段。
现在,我已经可以访问其他一些Lambda了,只需要一个参数,代码如下。
func (s *resourceService) GetProject(ctx context.Context, name string) projectStruct {
payload, err := json.Marshal(name)
util.Logger.Debugf("Payload",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
}
现在有了两个参数,我遇到了很多问题,尝试了很多不同的方法,从添加另一个Payload值开始,创建一个有两个值的字符串并封送它,封送两个参数并尝试将它们作为有效载荷添加,甚至附加两个封送的字节数组,但我无法将两个参数作为有效载荷发送
你知道这样做的正确方法吗?请帮助
Lambda函数只需要一个Payload。在AWS SDK的V1中,InvokeInput采用一个[]byte
参数来表达JSON,正如您所知。
您可以构建一个Json Payload来承载列表。看看你的例子,Payload可能看起来像
["name","name"]
你可以这样更改你的签名:
func (s *resourceService) GetProject(ctx context.Context, names []string) projectStruct
json.Marshal
可以像处理片中的元素一样处理片的封送处理,因此剩余的代码不需要更改。
当然,接收函数必须就其传递的数据的模式达成一致。如果您希望从字符串更改为字符串的列表,这将是一个突破性的更改。因此,Json模式通常使用命名的值,而不是标量。
[{ "Name": "Joan"},{"Name":"Susan"}]
您可以在不中断接收功能的情况下添加Age
和Address
(当然,它会忽略新字段,直到您对其进行编程以忽略它们(。
花点时间了解JSON——这是一种简单而富有表现力的编码标准,在任何地方都得到可靠的支持。JSON是Go中编码结构化数据的自然选择,因为JSON与Go的结构、映射和切片集成良好。