问题1:请问,http 转发请求至 dubbo-go,有什么办法拿到header中的字段吗? 问题2:attachment := ctx.Value(constant.AttachmentKey) 这样可以拿到吗?
【回答】
问题1: 可以使用 go-common/library/ecode.go 包中的 HandleHTTPError 和 WrapJSON 方法,从 http.Response 中获取 header 中的字段。
具体操作如下:
type Handler func(ctx *Context)
func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
ctx := newContext(r, w)
defer ctx.Body.Close()
// 获取 header 中的字段
var (
code int
message string
)
if err := h(ctx); err != nil {
if ecode, ok := err.(*ecode.Error); ok {
code = ecode.Code()
message = ecode.Message()
} else {
code = http.StatusInternalServerError
message = err.Error()
}
}
// 返回响应
ctx.RespAutoSetContentLength()
ctx.String(http.StatusText(code), code)
if message != "" {
ctx.String(message, code)
}
}
问题2: attachment := ctx.Value(constant.AttachmentKey) 可以获取到 attachment 对应的值。其中,constant.AttachmentKey 是一个常量,表示 attachment 的键。具体实现方式可以参考 context.Context.Value() 方法的实现。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。