当一个 golang gRPC 服务器调用一个处理函数时,传递的 ctx 值是从这里创建的私有顶层上下文派生的,在 grpc 传输层:
/go/pkg/mod/google.golang.org/grpc@v1.27.0/internal/transport/http2_server.go:219
t := &http2Server{
ctx: context.Background(),
done: done,
conn: conn,
remoteAddr: conn.RemoteAddr()
...
为什么该上下文不是从服务器构建时提供的根上下文派生的,有什么原因吗?
也许grpc.NewServer(opt ...ServerOption)
可以有一个 ctx 变体grpc.NewServerCtx(ctx, ...ServerOption)
?
这将为您提供传输您希望所有上下文包含的值的选项。