un-inception/clients/go/async/examples/hello_world.go
russell@unturf.com 331cba42aa feat: Complete 6 additional SDK implementations with fixes and examples
Go Async SDK (clients/go/async/):
- Fixed case-sensitive language detection bug (.R for R language)
- Created go.mod for module management
- Added comprehensive test suite
- Created 3 examples with expected output comments
- Added README with full documentation

Java Sync SDK (clients/java/sync/):
- RENAMED: Unsandbox.java -> Un.java (matches naming convention)
- Updated class name from Unsandbox to Un
- Created pom.xml for Maven build
- Added 6 examples (simple + SDK client versions)
- Created test suite with JUnit 5
- Added README with API documentation

JavaScript Async SDK (clients/javascript/async/):
- Fixed unused import
- Created package.json with ES module support
- Added 5 examples covering all async patterns
- Created 71 tests (all passing)
- Added comprehensive README

PHP Sync SDK (clients/php/sync/):
- RENAMED: Unsandbox.php -> un.php (matches naming convention)
- Created composer.json with PSR-4 autoloading
- Created phpunit.xml for testing
- Added 4 examples with expected output comments
- Created 54 tests across 4 test files
- Added README with full documentation

Ruby Sync SDK (clients/ruby/sync/):
- Created Gemfile and un.gemspec
- Created Rakefile with test task
- Updated examples to actually use the SDK
- Added 4 examples (hello_world, async_job, language_detection, snapshots)
- Created comprehensive test suite with 30+ tests
- Added README with documentation

Rust Sync SDK (clients/rust/sync/):
- Updated Cargo.toml with example declarations
- Created 4 examples (hello_world, fibonacci, multi_language, async_polling)
- Added comprehensive README with API reference
- All dependencies verified correct

All SDKs verified:
- HMAC-SHA256 authentication implemented
- 4-tier credential system (args > env > ~/.unsandbox > ./accounts.csv)
- Expected output comments for pipeline validation
- Proper error handling
- Language detection support
2026-01-15 17:32:24 -05:00

65 lines
1.8 KiB
Go

/*
Hello World example for unsandbox Go SDK - Asynchronous Version
This example demonstrates basic async execution with the unsandbox SDK.
Shows how to use goroutines and channels for non-blocking code execution.
To run:
export UNSANDBOX_PUBLIC_KEY="your-public-key"
export UNSANDBOX_SECRET_KEY="your-secret-key"
go run hello_world.go
Expected output:
Executing code asynchronously...
Result status: completed
Output: Hello from async unsandbox!
*/
package main
import (
"fmt"
"log"
"os"
un_async "github.com/unsandbox/un-go-async/src"
)
func main() {
// The code to execute
code := `print("Hello from async unsandbox!")`
// Resolve credentials from environment
creds, err := un_async.ResolveCredentials("", "")
if err != nil {
log.Printf("Error: UNSANDBOX_PUBLIC_KEY and UNSANDBOX_SECRET_KEY environment variables required")
log.Printf("Run with: export UNSANDBOX_PUBLIC_KEY=your-key UNSANDBOX_SECRET_KEY=your-key")
os.Exit(1)
}
// Execute the code asynchronously (returns channel)
fmt.Println("Executing code asynchronously...")
resultChan := un_async.ExecuteCode(creds, "python", code)
// Wait for result from channel
result := <-resultChan
// Check for errors
if result.Err != nil {
log.Fatalf("Execution error: %v", result.Err)
}
// Check status
if status, ok := result.Data["status"].(string); ok && status == "completed" {
fmt.Printf("Result status: %s\n", status)
if stdout, ok := result.Data["stdout"].(string); ok {
fmt.Printf("Output: %s", stdout)
}
if stderr, ok := result.Data["stderr"].(string); ok && stderr != "" {
fmt.Printf("Errors: %s", stderr)
}
} else {
status := result.Data["status"]
errMsg := result.Data["error"]
log.Fatalf("Execution failed with status: %v, error: %v", status, errMsg)
}
}