Official CloudEvents SDK to integrate your application with CloudEvents.
This library will help you to:
Note: Supported CloudEvents specification: 0.3, 1.0
Note: Supported go version: 1.22+
Add the module as dependency to your project:
go get github.com/cloudevents/sdk-go/v2
And import the module in your code
import cloudevents "github.com/cloudevents/sdk-go/v2"
To send a CloudEvent using HTTP:
func main() {
c, err := cloudevents.NewClientHTTP()
if err != nil {
log.Fatalf("failed to create client, %v", err)
}
// Create an Event.
event := cloudevents.NewEvent()
event.SetSource("example/uri")
event.SetType("example.type")
event.SetData(cloudevents.ApplicationJSON, map[string]string{"hello": "world"})
// Set a target.
ctx := cloudevents.ContextWithTarget(context.Background(), "http://localhost:8080/")
// Send that Event.
if result := c.Send(ctx, event); cloudevents.IsUndelivered(result) {
log.Fatalf("failed to send, %v", result)
} else {
log.Printf("sent: %v", event)
log.Printf("result: %v", result)
}
}
To start receiving CloudEvents using HTTP:
func receive(event cloudevents.Event) {
// do something with event.
fmt.Printf("%s", event)
}
func main() {
// The default client is HTTP.
c, err := cloudevents.NewClientHTTP()
if err != nil {
log.Fatalf("failed to create client, %v", err)
}
if err = c.StartReceiver(context.Background(), receive); err != nil {
log.Fatalf("failed to start receiver: %v", err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
event, err := cloudevents.NewEventFromHTTPRequest(r)
if err != nil {
log.Printf("failed to parse CloudEvent from request: %v", err)
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
}
w.Write([]byte(event.String()))
log.Println(event.String())
}
To marshal a CloudEvent into JSON:
event := cloudevents.NewEvent()
event.SetID("example-uuid-32943bac6fea")
event.SetSource("example/uri")
event.SetType("example.type")
event.SetData(cloudevents.ApplicationJSON, map[string]string{"hello": "world"})
bytes, err := json.Marshal(event)
To unmarshal JSON back into a CloudEvent:
event := cloudevents.NewEvent()
err := json.Unmarshal(bytes, &event)
Each SDK may have its own unique processes, tooling and guidelines, common
governance related material can be found in the
CloudEvents community
directory. In particular, in there you will find information concerning how SDK
projects are
managed,
guidelines
for how PR reviews and approval, and our
Code of Conduct
information.
If there is a security concern with one of the CloudEvents specifications, or with one of the project's SDKs, please send an email to cncf-cloudevents-security@lists.cncf.io.