Concurrency and Packages
Context Worker Value
A context can carry request metadata into a goroutine without using shared global state.
Context Worker Value
context_worker_value.go
package main
import (
"context"
"fmt"
)
func main() {
var requestID =
ctx := context.WithValue(context.Background(), "request", requestID)
done := make(chan string, 1)
go func(workerContext context.Context) {
value := workerContext.Value("request").(string)
done <- "handled:" + value
}(ctx)
message := <-done
fmt.Println("requestID=", requestID)
fmt.Println("message=", message)
fmt.Println("done=", true)
}
package main
import (
"context"
"fmt"
)
func main() {
var requestID =
ctx := context.WithValue(context.Background(), "request", requestID)
done := make(chan string, 1)
go func(workerContext context.Context) {
value := workerContext.Value("request").(string)
done <- "handled:" + value
}(ctx)
message := <-done
fmt.Println("requestID=", requestID)
fmt.Println("message=", message)
fmt.Println("done=", true)
}
package main
import (
"context"
"fmt"
)
func main() {
var requestID =
ctx := context.WithValue(context.Background(), "request", requestID)
done := make(chan string, 1)
go func(workerContext context.Context) {
value := workerContext.Value("request").(string)
done <- "handled:" + value
}(ctx)
message := <-done
fmt.Println("requestID=", requestID)
fmt.Println("message=", message)
fmt.Println("done=", true)
}
context value
Pass a context into a worker goroutine and send the derived label back through a channel.