# Go Examples

> Runnable per-modality examples in the SDK split repo.

Examples in the
[go-sdk repo](https://github.com/clutchcall/go-sdk/tree/main/examples).

## Voice — outbound originate

```go
v, _    := voice.New(voice.Config{BaseURL: BASE_URL, APIKey: KEY, OrgID: ORG})
call, _ := v.Calls.Originate(ctx, voice.OriginateArgs{
  To: "+15551234567", From: "+15558675309",
  TrunkID: "trunk_main", Agent: "healthcare-assistant",
})
fmt.Println("call sid:", call.SID)
```

## Streams — record-to-disk viewer

```go
out, _ := os.Create("recording.mp4")
viewer, _ := streams.OpenBroadcastViewer(ctx, signedURL, streams.ViewerOpts{
  OnChunk: func(init, chunk []byte) { out.Write(chunk) },
})
defer viewer.Close()
```

## Robotics — telemetry publisher

```go
r, _    := robotics.New(robotics.Config{RelayHost: HOST, Token: TOK, RobotID: "tb-7"})
odom, _ := r.PublishTelemetry(ctx, robotics.PublishArgs{
  Topic: "odom", TypeName: "nav_msgs/msg/Odometry",
  QoS:   robotics.QoSProfile{Reliability: robotics.Reliable, Depth: 10},
})
for tick := range time.Tick(100 * time.Millisecond) { _ = tick; odom.Write(cdr) }
```

## Games — authoritative server

```go
g, _     := games.New(games.Config{RelayHost: HOST, Token: TOK, RoomID: "duel-42"})
state, _ := g.PublishState(ctx, games.StateOpts{TickHZ: 30})

g.SubscribeInputs(ctx, func(pid string, p []byte) { world.Apply(pid, p) })
for range time.Tick(time.Second / 30) { state.Write(world.Snapshot()) }
```

## Data — MQTT-style subscribe

```go
d, _ := data.New(data.Config{RelayHost: HOST, Token: TOK, ClientID: "ingest"})
sub, _ := d.Subscribe(ctx, data.SubscribeArgs{TopicFilter: "sensors/+/temperature"},
  func(msg data.Message) {
    log.Printf("%s ← %s = %s", msg.Topic, msg.FromClientID, string(msg.Payload))
  })
defer sub.Close()
```
