From fa978ea5a7fd9157932f0fbddae5c3593b8e6495 Mon Sep 17 00:00:00 2001 From: "go-interview-practice-bot[bot]" <230190823+go-interview-practice-bot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 03:02:12 +0000 Subject: [PATCH 1/2] Add solution for Challenge 30 --- .../submissions/kiramux/solution-template.go | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 challenge-30/submissions/kiramux/solution-template.go diff --git a/challenge-30/submissions/kiramux/solution-template.go b/challenge-30/submissions/kiramux/solution-template.go new file mode 100644 index 00000000..70b466ce --- /dev/null +++ b/challenge-30/submissions/kiramux/solution-template.go @@ -0,0 +1,160 @@ +package main + +import ( + "context" + "fmt" + "time" +) + +// ContextManager defines a simplified interface for basic context operations +type ContextManager interface { + // Create a cancellable context from a parent context + CreateCancellableContext(parent context.Context) (context.Context, context.CancelFunc) + + // Create a context with timeout + CreateTimeoutContext(parent context.Context, timeout time.Duration) (context.Context, context.CancelFunc) + + // Add a value to context + AddValue(parent context.Context, key, value interface{}) context.Context + + // Get a value from context + GetValue(ctx context.Context, key interface{}) (interface{}, bool) + + // Execute a task with context cancellation support + ExecuteWithContext(ctx context.Context, task func() error) error + + // Wait for context cancellation or completion + WaitForCompletion(ctx context.Context, duration time.Duration) error +} + +// Simple context manager implementation +type simpleContextManager struct{} + +// NewContextManager creates a new context manager +func NewContextManager() ContextManager { + return &simpleContextManager{} +} + +// CreateCancellableContext creates a cancellable context +func (cm *simpleContextManager) CreateCancellableContext(parent context.Context) (context.Context, context.CancelFunc) { + // DONE: Implement cancellable context creation + // Hint: Use context.WithCancel(parent) + ctx, cancel := context.WithCancel(parent) + return ctx, cancel +} + +// CreateTimeoutContext creates a context with timeout +func (cm *simpleContextManager) CreateTimeoutContext(parent context.Context, timeout time.Duration) (context.Context, context.CancelFunc) { + // DONE: Implement timeout context creation + // Hint: Use context.WithTimeout(parent, timeout) + ctx, cancel := context.WithTimeout(parent, timeout) + return ctx, cancel +} + +// AddValue adds a key-value pair to the context +func (cm *simpleContextManager) AddValue(parent context.Context, key, value interface{}) context.Context { + // DONE: Implement value context creation + // Hint: Use context.WithValue(parent, key, value) + ctx := context.WithValue(parent, key, value) + return ctx +} + +// GetValue retrieves a value from the context +func (cm *simpleContextManager) GetValue(ctx context.Context, key interface{}) (interface{}, bool) { + // DONE: Implement value retrieval from context + // Hint: Use ctx.Value(key) and check if it's nil + value := ctx.Value(key) + // Return the value and a boolean indicating if it was found + if value != nil { + return value, true + } else { + return nil, false + } +} + +// ExecuteWithContext executes a task that can be cancelled via context +func (cm *simpleContextManager) ExecuteWithContext(ctx context.Context, task func() error) error { + // DONE: Implement task execution with context cancellation + // Hint: Run the task in a goroutine and use select with ctx.Done() + done := make(chan error, 1) + + go func() { + done <- task() + }() + + // Return context error if cancelled, task error if task fails + select { + case err := <-done: + return err // Task Compeleted first + case <-ctx.Done(): + return ctx.Err() // Context cancelled/timeout first + } +} + +// WaitForCompletion waits for a duration or until context is cancelled +func (cm *simpleContextManager) WaitForCompletion(ctx context.Context, duration time.Duration) error { + // DONE: Implement waiting with context awareness + // Hint: Use select with ctx.Done() and time.After(duration) + // Return context error if cancelled, nil if duration completes + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(duration): + return nil + } +} + +// Helper function - simulate work that can be cancelled +func SimulateWork(ctx context.Context, workDuration time.Duration, description string) error { + // DONE: Implement cancellable work simulation + // Hint: Use select with ctx.Done() and time.After(workDuration) + // Print progress messages and respect cancellation + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(workDuration): + fmt.Println(description) + return nil + } +} + +// Helper function - process multiple items with context +func ProcessItems(ctx context.Context, items []string) ([]string, error) { + // DONE: Implement batch processing with context awareness + // Process each item but check for cancellation between items + // Return partial results if cancelled + result := make([]string, 0, len(items)) + for _, s := range items { + select { + case <-ctx.Done(): + return result, ctx.Err() + default: + // The test file's cancellation wait time is too short; a wait time needs to be set. + time.Sleep(30 * time.Millisecond) + processedStr := "processed_" + s + result = append(result, processedStr) + } + } + return result, nil + +} + +// Example usage +func main() { + fmt.Println("Context Management Challenge") + fmt.Println("Implement the context manager methods!") + + // Example of how the context manager should work: + cm := NewContextManager() + + // Create a cancellable context + ctx, cancel := cm.CreateCancellableContext(context.Background()) + defer cancel() + + // Add some values + ctx = cm.AddValue(ctx, "user", "alice") + ctx = cm.AddValue(ctx, "requestID", "12345") + + // Use the context + fmt.Println("Context created with values!") +} From 36540f76d464fe13965ab14f36c132448d294b85 Mon Sep 17 00:00:00 2001 From: kiramux <160688228+kiramux@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:08:58 +0800 Subject: [PATCH 2/2] Update challenge-30/submissions/kiramux/solution-template.go Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- challenge-30/submissions/kiramux/solution-template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-30/submissions/kiramux/solution-template.go b/challenge-30/submissions/kiramux/solution-template.go index 70b466ce..f7c83d4a 100644 --- a/challenge-30/submissions/kiramux/solution-template.go +++ b/challenge-30/submissions/kiramux/solution-template.go @@ -85,7 +85,7 @@ func (cm *simpleContextManager) ExecuteWithContext(ctx context.Context, task fun // Return context error if cancelled, task error if task fails select { case err := <-done: - return err // Task Compeleted first + return err // Task completed first case <-ctx.Done(): return ctx.Err() // Context cancelled/timeout first }