11.6.4. Go 功能返回值
HTTP 请求触发的功能可以直接设置响应。您可以使用 Go http.ResponseWriter 将该功能配置为执行此操作。
HTTP 响应示例
func Handle(ctx context.Context, res http.ResponseWriter, req *http.Request) {
// Set response
res.Header().Add("Content-Type", "text/plain")
res.Header().Add("Content-Length", "3")
res.WriteHeader(200)
_, err := fmt.Fprintf(res, "OK\n")
if err != nil {
fmt.Fprintf(os.Stderr, "error or response write: %v", err)
}
}
云事件触发的功能可能会返回任何内容、error 或 CloudEvent,从而将事件推送到 Knative Eventing 系统。在这种情况下,您必须为云事件设置唯一 ID 、正确的 Source 和 Type。数据可以从定义的结构或者从一个 映射(map) 填充。
CloudEvent 响应示例
func Handle(ctx context.Context, event cloudevents.Event) (resp *cloudevents.Event, err error) {
// ...
response := cloudevents.NewEvent()
response.SetID("example-uuid-32943bac6fea")
response.SetSource("purchase/getter")
response.SetType("purchase")
// Set the data from Purchase type
response.SetData(cloudevents.ApplicationJSON, Purchase{
CustomerId: custId,
ProductId: prodId,
})
// OR set the data directly from map
response.SetData(cloudevents.ApplicationJSON, map[string]string{"customerId": custId, "productId": prodId})
// Validate the response
resp = &response
if err = resp.Validate(); err != nil {
fmt.Printf("invalid event created. %v", err)
}
return
}