CloudEvents
Go SDK forOfficial CloudEvents SDK to integrate your application with CloudEvents.
This library will help you to:
- Represent CloudEvents in memory
- Use Event Formats to serialize/deserialize CloudEvents
- Use Protocol Bindings to send/receive CloudEvents
Note: Supported CloudEvents specification: 0.3, 1.0
Note: Supported go version: 1.18+
Get started
Add the module as dependency using go mod:
go get github.com/cloudevents/sdk-go/v2@v2.12.0
And import the module in your code
import cloudevents "github.com/cloudevents/sdk-go/v2"
Send your first CloudEvent
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)
}
}
Receive your first CloudEvent
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)
}
log.Fatal(c.StartReceiver(context.Background(), receive));
}
Create a CloudEvent from an HTTP Request
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())
}
Serialize/Deserialize a CloudEvent
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)
Go further
- Look at the complete documentation: https://cloudevents.github.io/sdk-go/
- Dig into the godoc: https://godoc.org/github.com/cloudevents/sdk-go/v2
- Check out the samples directory for an extended list of examples showing the different SDK features
Community
- There are bi-weekly calls immediately following the Serverless/CloudEvents call at 9am PT (US Pacific). Which means they will typically start at 10am PT, but if the other call ends early then the SDK call will start early as well. See the CloudEvents meeting minutes to determine which week will have the call.
- Slack: #cloudeventssdk channel under CNCF's Slack workspace.
- Email: https://lists.cncf.io/g/cncf-cloudevents-sdk
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.