Overview
This guide demonstrates the fundamental operations of the Switchport SDK:
- Initializing the client
- Executing prompts
- Recording metrics
- Working with different metric types
Setup
First, install the SDK and set your API key:
go get github.com/switchport-ai/switchport-go
export SWITCHPORT_API_KEY=sp_your_key_here
Example 1: Simple Prompt Execution
Execute a prompt without user identification or variables:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
// Initialize client
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Execute prompt
response, err := client.Prompts.Execute(
"welcome-message",
nil, // no user
nil, // no variables
)
if err != nil {
log.Fatalf("Failed to execute prompt: %v", err)
}
fmt.Println("Generated text:")
fmt.Println(response.Text)
fmt.Printf("\nModel: %s\n", response.Model)
fmt.Printf("Version: %s\n", response.VersionName)
}
Example 2: Prompt with Variables
Pass dynamic variables to your prompt:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
response, err := client.Prompts.Execute(
"welcome-message",
nil, // no user
map[string]interface{}{
"customer_name": "Alice",
"product": "Pro Plan",
},
)
if err != nil {
log.Fatalf("Failed to execute prompt: %v", err)
}
fmt.Println("Generated text:")
fmt.Println(response.Text)
}
Make sure your prompt template in the dashboard includes the variables like {{customer_name}} and {{product}}.
Example 3: Prompt with User Identification
Use user identification for deterministic version assignment:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
response, err := client.Prompts.Execute(
"product-description",
map[string]interface{}{
"user_id": "user_123",
"tier": "premium",
},
map[string]interface{}{
"product_name": "Enterprise Widget",
},
)
if err != nil {
log.Fatalf("Failed to execute prompt: %v", err)
}
fmt.Printf("Version: %s\n", response.VersionName)
fmt.Printf("Request ID: %s\n", response.RequestID)
fmt.Printf("\n%s\n", response.Text)
}
Example 4: Recording a Float Metric
Track numerical values like satisfaction scores:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Record user satisfaction (1-5 scale)
result, err := client.Metrics.Record(
"user_satisfaction",
4.5,
map[string]interface{}{
"user_id": "user_123",
"tier": "premium",
},
nil, // timestamp (nil = current time)
)
if err != nil {
log.Fatalf("Failed to record metric: %v", err)
}
fmt.Printf("Metric recorded! Event ID: %s\n", result.MetricEventID)
}
Make sure you’ve created the metric definition in the dashboard before recording.
Example 5: Recording a Boolean Metric
Track yes/no events like conversions:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Track conversion
result, err := client.Metrics.Record(
"conversion_success",
true,
map[string]interface{}{
"campaign_id": "summer_2025",
"user_id": "user_456",
},
nil,
)
if err != nil {
log.Fatalf("Failed to record metric: %v", err)
}
fmt.Printf("Conversion tracked! Event ID: %s\n", result.MetricEventID)
}
Example 6: Recording an Enum Metric
Track categorical values:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Track user sentiment
result, err := client.Metrics.Record(
"user_sentiment",
"positive", // Can be "positive", "neutral", "negative"
map[string]interface{}{
"feature": "new_ui",
"user_id": "user_789",
},
nil,
)
if err != nil {
log.Fatalf("Failed to record metric: %v", err)
}
fmt.Printf("Sentiment recorded! Event ID: %s\n", result.MetricEventID)
}
Example 7: Complete Workflow
Execute a prompt and record metrics:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Define subject identification for this user
subject := map[string]interface{}{
"user_id": "user_123",
"tier": "premium",
}
// Execute prompt
response, err := client.Prompts.Execute(
"welcome-message", subject,
map[string]interface{}{
"customer_name": "Alice",
},
)
if err != nil {
log.Fatalf("Failed to execute prompt: %v", err)
}
fmt.Println("Message sent to user:")
fmt.Println(response.Text)
fmt.Printf("\nVersion: %s\n", response.VersionName)
// Simulate user interaction...
userSatisfaction := 4.5
// Record metric with same subject
result, err := client.Metrics.Record(
"user_satisfaction",
userSatisfaction,
subject, // Same subject!
nil,
)
if err != nil {
log.Fatalf("Failed to record metric: %v", err)
}
fmt.Printf("\nMetric recorded! Event ID: %s\n", result.MetricEventID)
fmt.Println("This metric is linked to version:", response.VersionName)
}
Always use the same subject when executing prompts and recording metrics to ensure proper metric aggregation per version.
Example 8: String Subject
Use a simple string as subject:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Use string subject
response, err := client.Prompts.Execute(
"greeting",
"guest_user", // String Subject
nil,
)
if err != nil {
log.Fatalf("Failed to execute prompt: %v", err)
}
fmt.Printf("Version: %s\n", response.VersionName)
fmt.Println(response.Text)
}
Example 9: Error Handling
Handle errors gracefully:
package main
import (
"errors"
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
response, err := client.Prompts.Execute(
"my-prompt",
nil,
nil,
)
if err != nil {
var promptNotFound *switchport.PromptNotFoundError
var authErr *switchport.AuthenticationError
switch {
case errors.As(err, &promptNotFound):
fmt.Println("Prompt not found - check your prompt key")
// Use fallback
fmt.Println("Using default message...")
return
case errors.As(err, &authErr):
fmt.Println("Authentication failed - check your API key")
return
default:
fmt.Printf("Unexpected error: %v\n", err)
return
}
}
fmt.Println(response.Text)
}
Example 10: Multiple Metrics
Record multiple metrics for the same user:
package main
import (
"fmt"
"log"
"github.com/switchport-ai/switchport-go/switchport"
)
func main() {
client, err := switchport.NewClient("")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
subject := map[string]interface{}{
"user_id": "user_123",
"session_id": "session_456",
}
// Record multiple related metrics
_, err = client.Metrics.Record("satisfaction", 4.5, subject, nil)
if err != nil {
log.Printf("Failed to record satisfaction: %v", err)
}
_, err = client.Metrics.Record("conversion", true, subject, nil)
if err != nil {
log.Printf("Failed to record conversion: %v", err)
}
_, err = client.Metrics.Record("sentiment", "positive", subject, nil)
if err != nil {
log.Printf("Failed to record sentiment: %v", err)
}
fmt.Println("All metrics recorded for user_123!")
}
Next Steps
Advanced Examples
Explore advanced A/B testing patterns
Error Handling
Learn best practices for error handling
API Reference
View the complete API reference
Core Concepts
Understand key Switchport concepts