Examples 
This section provides practical examples and use cases for the Go Composer SDK. Each example includes complete, runnable code that demonstrates real-world usage patterns.
Quick Examples 
Basic Setup 
package main
import (
    "fmt"
    "log"
    
    "github.com/scagogogo/go-composer-sdk/pkg/composer"
)
func main() {
    // Create Composer instance
    comp, err := composer.New(composer.DefaultOptions())
    if err != nil {
        log.Fatalf("Failed to create Composer instance: %v", err)
    }
    
    // Set working directory to your PHP project
    comp.SetWorkingDir("/path/to/your/php/project")
    
    // Check if Composer is installed
    if !comp.IsInstalled() {
        log.Fatal("Composer is not installed")
    }
    
    fmt.Println("Composer is ready!")
}Installing Dependencies 
func installDependencies(comp *composer.Composer) error {
    fmt.Println("Installing dependencies...")
    
    // Install all dependencies
    err := comp.Install(false, false) // noDev=false, optimize=false
    if err != nil {
        return fmt.Errorf("failed to install dependencies: %w", err)
    }
    
    fmt.Println("Dependencies installed successfully!")
    return nil
}Adding a Package 
func addPackage(comp *composer.Composer) error {
    packageName := "monolog/monolog"
    version := "^3.0"
    
    fmt.Printf("Adding package %s %s...\n", packageName, version)
    
    err := comp.RequirePackage(packageName, version)
    if err != nil {
        return fmt.Errorf("failed to add package: %w", err)
    }
    
    fmt.Printf("Package %s added successfully!\n", packageName)
    return nil
}Complete Examples 
1. Project Setup Automation 
package main
import (
    "fmt"
    "log"
    "os"
    
    "github.com/scagogogo/go-composer-sdk/pkg/composer"
)
func main() {
    projectDir := "/path/to/new/php/project"
    
    // Create project directory
    err := os.MkdirAll(projectDir, 0755)
    if err != nil {
        log.Fatalf("Failed to create project directory: %v", err)
    }
    
    // Create Composer instance
    comp, err := composer.New(composer.DefaultOptions())
    if err != nil {
        log.Fatalf("Failed to create Composer instance: %v", err)
    }
    
    comp.SetWorkingDir(projectDir)
    
    // Initialize new project
    initOptions := composer.InitOptions{
        Name:        "mycompany/my-project",
        Description: "My awesome PHP project",
        Type:        "project",
        License:     "MIT",
        Authors: []composer.Author{
            {
                Name:  "John Doe",
                Email: "john@example.com",
            },
        },
        MinimumStability: "stable",
        PreferStable:     true,
    }
    
    err = comp.InitProject(initOptions)
    if err != nil {
        log.Fatalf("Failed to initialize project: %v", err)
    }
    
    // Add essential packages
    packages := map[string]string{
        "symfony/console":    "^6.0",
        "monolog/monolog":    "^3.0",
        "guzzlehttp/guzzle":  "^7.0",
    }
    
    err = comp.RequirePackages(packages)
    if err != nil {
        log.Fatalf("Failed to add packages: %v", err)
    }
    
    // Add development dependencies
    devPackages := map[string]string{
        "phpunit/phpunit":       "^10.0",
        "symfony/var-dumper":    "^6.0",
        "friendsofphp/php-cs-fixer": "^3.0",
    }
    
    for pkg, version := range devPackages {
        err = comp.RequireDevPackage(pkg, version)
        if err != nil {
            log.Printf("Warning: Failed to add dev package %s: %v", pkg, err)
        }
    }
    
    // Generate optimized autoloader
    err = comp.DumpAutoloadOptimized()
    if err != nil {
        log.Printf("Warning: Failed to generate optimized autoloader: %v", err)
    }
    
    fmt.Println("Project setup completed successfully!")
}2. Dependency Management 
package main
import (
    "context"
    "fmt"
    "log"
    "time"
    
    "github.com/scagogogo/go-composer-sdk/pkg/composer"
)
func manageDependencies() {
    comp, err := composer.New(composer.DefaultOptions())
    if err != nil {
        log.Fatalf("Failed to create Composer instance: %v", err)
    }
    
    comp.SetWorkingDir("/path/to/php/project")
    
    // Check for outdated packages
    fmt.Println("Checking for outdated packages...")
    outdated, err := comp.ShowOutdated()
    if err != nil {
        log.Printf("Failed to check outdated packages: %v", err)
    } else if outdated != "" {
        fmt.Printf("Outdated packages found:\n%s\n", outdated)
        
        // Update with timeout
        ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
        defer cancel()
        
        fmt.Println("Updating packages...")
        err = comp.UpdateWithContext(ctx, false, true) // noDev=false, optimize=true
        if err != nil {
            log.Printf("Failed to update packages: %v", err)
        } else {
            fmt.Println("Packages updated successfully!")
        }
    } else {
        fmt.Println("All packages are up to date!")
    }
    
    // Show dependency tree
    fmt.Println("\nDependency tree:")
    tree, err := comp.ShowDependencyTree("")
    if err != nil {
        log.Printf("Failed to show dependency tree: %v", err)
    } else {
        fmt.Println(tree)
    }
}3. Security Audit 
package main
import (
    "encoding/json"
    "fmt"
    "log"
    
    "github.com/scagogogo/go-composer-sdk/pkg/composer"
)
func performSecurityAudit() {
    comp, err := composer.New(composer.DefaultOptions())
    if err != nil {
        log.Fatalf("Failed to create Composer instance: %v", err)
    }
    
    comp.SetWorkingDir("/path/to/php/project")
    
    // Perform security audit
    fmt.Println("Performing security audit...")
    auditResult, err := comp.Audit()
    if err != nil {
        log.Fatalf("Security audit failed: %v", err)
    }
    
    // Parse audit results
    var result composer.AuditResult
    err = json.Unmarshal([]byte(auditResult), &result)
    if err != nil {
        log.Printf("Failed to parse audit results: %v", err)
        fmt.Printf("Raw audit output:\n%s\n", auditResult)
        return
    }
    
    // Display results
    if result.Found == 0 {
        fmt.Println("✅ No security vulnerabilities found!")
    } else {
        fmt.Printf("⚠️  Found %d security vulnerabilities:\n\n", result.Found)
        
        for _, vuln := range result.Vulnerabilities {
            fmt.Printf("🔴 %s\n", vuln.Title)
            fmt.Printf("   Package: %s\n", vuln.Package)
            fmt.Printf("   Version: %s\n", vuln.Version)
            fmt.Printf("   Severity: %s\n", vuln.Severity)
            fmt.Printf("   Description: %s\n", vuln.Description)
            if len(vuln.References) > 0 {
                fmt.Printf("   References:\n")
                for _, ref := range vuln.References {
                    fmt.Printf("     - %s\n", ref)
                }
            }
            fmt.Println()
        }
        
        fmt.Println("Please update the affected packages to resolve these vulnerabilities.")
    }
}4. CI/CD Integration 
package main
import (
    "context"
    "fmt"
    "log"
    "os"
    "time"
    
    "github.com/scagogogo/go-composer-sdk/pkg/composer"
)
func cicdPipeline() {
    // Check if we're in CI environment
    isCI := os.Getenv("CI") == "true"
    
    comp, err := composer.New(composer.DefaultOptions())
    if err != nil {
        log.Fatalf("Failed to create Composer instance: %v", err)
    }
    
    // Set working directory
    workDir := os.Getenv("GITHUB_WORKSPACE")
    if workDir == "" {
        workDir = "."
    }
    comp.SetWorkingDir(workDir)
    
    // Configure for CI environment
    if isCI {
        comp.SetEnv([]string{
            "COMPOSER_NO_INTERACTION=1",
            "COMPOSER_PREFER_STABLE=1",
            "COMPOSER_MEMORY_LIMIT=-1",
        })
    }
    
    // Validate composer.json
    fmt.Println("Validating composer.json...")
    err = comp.Validate()
    if err != nil {
        log.Fatalf("composer.json validation failed: %v", err)
    }
    fmt.Println("✅ composer.json is valid")
    
    // Install dependencies with timeout
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
    defer cancel()
    
    fmt.Println("Installing dependencies...")
    installOptions := composer.InstallOptions{
        NoDev:        false,
        Optimize:     true,
        PreferDist:   true,
        NoProgress:   isCI,
        NoSuggest:    true,
        PreferStable: true,
    }
    
    err = comp.InstallWithOptions(installOptions)
    if err != nil {
        log.Fatalf("Failed to install dependencies: %v", err)
    }
    fmt.Println("✅ Dependencies installed")
    
    // Security audit
    fmt.Println("Running security audit...")
    auditResult, err := comp.Audit()
    if err != nil {
        log.Printf("Security audit failed: %v", err)
    } else {
        fmt.Println("✅ Security audit completed")
        
        // In CI, you might want to fail the build if vulnerabilities are found
        if isCI {
            var result composer.AuditResult
            if json.Unmarshal([]byte(auditResult), &result) == nil && result.Found > 0 {
                log.Fatalf("Security vulnerabilities found: %d", result.Found)
            }
        }
    }
    
    // Check platform requirements
    fmt.Println("Checking platform requirements...")
    err = comp.CheckPlatformReqs()
    if err != nil {
        log.Printf("Platform requirements check failed: %v", err)
    } else {
        fmt.Println("✅ Platform requirements satisfied")
    }
    
    fmt.Println("CI/CD pipeline completed successfully!")
}Example Categories 
Basic Operations 
Simple examples covering the most common use cases like installing packages, updating dependencies, and basic project management.
Package Management 
Advanced package management scenarios including batch operations, dependency analysis, and conflict resolution.
Project Setup 
Complete project initialization and setup automation examples for different types of PHP projects.
Security Audit 
Security-focused examples showing how to integrate vulnerability scanning and dependency auditing into your workflows.
Advanced Usage 
Complex scenarios including custom configurations, error handling patterns, and integration with other tools.
Running the Examples 
- Install the SDK: bash- go get github.com/scagogogo/go-composer-sdk
- Update paths: Replace - /path/to/php/projectwith your actual PHP project path
- Run the examples: bash- go run example.go
Tips for Using Examples 
- Always handle errors: The examples show proper error handling patterns
- Use context for timeouts: Long-running operations should use context
- Configure for your environment: Adjust paths and options as needed
- Test in development first: Try examples in a test environment before production
- Check prerequisites: Ensure PHP and Composer requirements are met
Contributing Examples 
Have a useful example? We'd love to include it! Please:
- Fork the repository
- Add your example to the appropriate section
- Include clear documentation and comments
- Test the example thoroughly
- Submit a pull request
For more information, see our Contributing Guide.