diff --git a/code-samples/eventing/helloworld/helloworld-go/README.md b/code-samples/eventing/helloworld/helloworld-go/README.md index 34839db057..1ffc437377 100644 --- a/code-samples/eventing/helloworld/helloworld-go/README.md +++ b/code-samples/eventing/helloworld/helloworld-go/README.md @@ -34,67 +34,69 @@ cd knative-docs/code-samples/eventing/helloworld/helloworld-go code creates a basic web server which listens on port 8080: ```go + package main + import ( - "context" - "log" - cloudevents "github.com/cloudevents/sdk-go/v2" - "github.com/google/uuid" + "context" + "log" + + cloudevents "github.com/cloudevents/sdk-go/v2" + "github.com/google/uuid" ) - - func receive(ctx context.Context, event cloudevents.Event)( * cloudevents.Event, cloudevents.Result) { - // Here is where your code to process the event will go. - // In this example we will log the event msg - log.Printf("Event received. \n%s\n", event) - data: = & HelloWorld {} - if err: = event.DataAs(data); - err != nil { - log.Printf("Error while extracting cloudevent Data: %s\n", err.Error()) - return nil, cloudevents.NewHTTPResult(400, "failed to convert data: %s", err) - } - log.Printf("Hello World Message from received event %q", data.Msg) - // Respond with another event (optional) - // This is optional and is intended to show how to respond back with another event after processing. - // The response will go back into the knative eventing system just like any other event - newEvent: = cloudevents.NewEvent() - newEvent.SetID(uuid.New().String()) - newEvent.SetSource("knative/eventing/samples/hello-world") - newEvent.SetType("dev.knative.samples.hifromknative") - if err: = newEvent.SetData(cloudevents.ApplicationJSON, HiFromKnative { - Msg: "Hi from helloworld-go app!" - }); - err != nil { - return nil, cloudevents.NewHTTPResult(500, "failed to set response data: %s", err) - } - log.Printf("Responding with event\n%s\n", newEvent) - return &newEvent, nil + + func receive(ctx context.Context, event cloudevents.Event) (*cloudevents.Event, cloudevents.Result) { + // Here is where your code to process the event will go. + // In this example we will log the event msg + log.Printf("Event received. \n%s\n", event) + data := &HelloWorld{} + if err := event.DataAs(data); err != nil { + log.Printf("Error while extracting cloudevent Data: %s\n", err.Error()) + return nil, cloudevents.NewHTTPResult(400, "failed to convert data: %s", err) + } + log.Printf("Hello World Message from received event %q", data.Msg) + + // Respond with another event (optional) + // This is optional and is intended to show how to respond back with another event after processing. + // The response will go back into the knative eventing system just like any other event + newEvent := cloudevents.NewEvent() + // Setting the ID here is not necessary. When using NewDefaultClient the ID is set + // automatically. We set the ID anyway so it appears in the log. + newEvent.SetID(uuid.New().String()) + newEvent.SetSource("knative/eventing/samples/hello-world") + newEvent.SetType("dev.knative.samples.hifromknative") + if err := newEvent.SetData(cloudevents.ApplicationJSON, HiFromKnative{Msg: "Hi from helloworld-go app!"}); err != nil { + return nil, cloudevents.NewHTTPResult(500, "failed to set response data: %s", err) + } + log.Printf("Responding with event\n%s\n", newEvent) + return &newEvent, nil } - + func main() { - log.Print("Hello world sample started.") - c, err: = cloudevents.NewDefaultClient() - if err != nil { - log.Fatalf("failed to create client, %v", err) - } - log.Fatal(c.StartReceiver(context.Background(), receive)) + log.Print("Hello world sample started.") + c, err := cloudevents.NewDefaultClient() + if err != nil { + log.Fatalf("failed to create client, %v", err) + } + log.Fatal(c.StartReceiver(context.Background(), receive)) } - ``` + ``` 1. Create a new file named `eventschemas.go` and paste the following code. This defines the data schema of the CloudEvents. ```go package main - + // HelloWorld defines the Data of CloudEvent with type=dev.knative.samples.helloworld type HelloWorld struct { - // Msg holds the message from the event - Msg string `json:"msg,omitempty,string"` + // Msg holds the message from the event + Msg string `json:"msg,omitempty"` } - + // HiFromKnative defines the Data of CloudEvent with type=dev.knative.samples.hifromknative type HiFromKnative struct { - // Msg holds the message from the event - Msg string `json:"msg,omitempty,string"` + // Msg holds the message from the event + Msg string `json:"msg,omitempty"` } ```