Я предлагаю вам использовать контекст только при жизни одной задачи и передавать тот же контекст через функции.Также вы должны понимать, где использовать контекст, а где просто передавать аргументы в функции.
Другим предложением является использование пользовательских типов для установки и получения значений из контекста.
В соответствии со всем вышеизложенным ваша программа должна выглядеть следующим образом:
package main
import (
"context"
"fmt"
)
type KeyMsg string
func main() {
ctx := context.WithValue(context.Background(), KeyMsg("msg"), "hello")
DoSomething(ctx)
}
// DoSomething accepts context value, retrieves message by KeyMsg and prints it.
func DoSomething(ctx context.Context) {
msg, ok := ctx.Value(KeyMsg("msg")).(string)
if !ok {
return
}
fmt.Println("got msg:", msg)
}
Вы можетепереместите функцию DoSomething в другой пакет и просто назовите ее как имя_пакета. DoSomething ничего не изменит.