代码拉取完成,页面将自动刷新
package cRpc
import (
"context"
"errors"
"reflect"
"google.golang.org/grpc/metadata"
"gitee.com/csingo/cContext"
)
func GrpcHandler[Q, T any](ctx context.Context, app, service, method string, req Q, rsp T) (err error) {
instance := GetService(app, service)
if instance == nil {
return errors.New("rpc 服务异常")
}
caller := reflect.ValueOf(instance).MethodByName(method)
if !caller.IsValid() {
return errors.New("rpc 服务方法不存在")
}
// 读取上下文数据
newCtx := cContext.New()
if md, ok := metadata.FromIncomingContext(ctx); ok {
for k, v := range md {
var item string
if len(v) > 0 {
item = v[0]
}
newCtx.Header(k, item)
}
}
responseValues := caller.Call([]reflect.Value{reflect.ValueOf(newCtx), reflect.ValueOf(req)})
if !responseValues[1].IsNil() {
return responseValues[1].Interface().(error)
}
rsp = responseValues[0].Interface().(T)
return
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。