2 回答
TA贡献1812条经验 获得超5个赞
修正对“类型同义词”的错误使用
对于数字1:
Gorilla/rpc/json的CodecRequest.WriteResponse(它实现Gorilla/rpc的CodecRequest)是一个位置,其中所述代码的接触http.ResponseWriter。
这意味着我们必须有自己的实现CodecRequest来设置CORS标头。
CodecRequest服务器使用的每一个实际上都是由Codec;生成的;Codecs是制造工厂CodecRequests,换句话说。
这意味着我们必须创建一个Codec来生成CodecRequest将设置CORS标头的。
Go的伟大之处在于,编写这种额外的行为真的很容易!
试试这个:
package cors_codec
import (
"Gorilla/rpc"
"net/http"
"strings"
)
//interface: ain't nobody dope like me I feel so fresh and clean
func CodecWithCors([]string corsDomains, unpimped rpc.Codec) rpc.Codec {
return corsCodecRequest{corsDomains, unpimped}
}
type corsCodecRequest struct {
corsDomains []string
underlyingCodecRequest rpc.CodecRequest
}
//override exactly one method of the underlying anonymous field and delegate to it.
func (ccr corsCodecRequest) WriteResponse(w http.ResponseWriter, reply interface{}, methodErr error) error {
w.Header().add("Access-Control-Allow-Origin", strings.join(ccr.corsDomains, " "))
return ccr.underlyingCodecRequest.WriteResponse(w, reply, error)
}
type corsCodec struct {
corsDomains []string
underlyingCodec rpc.Codec
}
//override exactly one method of the underlying anonymous field and delegate to it.
func (cc corsCodec) NewRequest(req *http.Request) rpc.CodecRequest {
return corsCodecRequest{cc.corsDomains, cc.underlyingCodec.NewRequest(req)}
}
那是一个有趣的练习!
- 2 回答
- 0 关注
- 198 浏览
添加回答
举报