11.5.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)
  }
}

CloudEvent によってトリガーされる関数は、何も返さないか、error または CloudEvent を返し、Knative Eventing システムにイベントをプッシュする場合があります。この場合、CloudEvent に一意の ID、適切な ソース および 種別 を設定する必要があります。データは、定義した構造または マップ から入力できます。

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
}