我有一个看起来像这样的 JSON 结构pkg/response/foobar.go
type Foo struct {
RequestID string `json:"request_id"`
Response string `json:"response"`
}
func (resp *Foo) JSONBytes() []byte {
result, err := json.Marshal(resp)
if err != nil {
// log the error (see below)
}
return result
}
我对 Go很陌生,我正在尝试集成 Uber 的 Zap 记录器。中pkg/endpoint/route1.go
,我有
func processRequest(s *zap.SugaredLogger, // other params) error {
for resp := range responses {
//... other cases
case *response.Foo:
resp.Sugar = s // want to do something like this
respBytes := resp.JSONBytes()
wsResponses <- respBytes
}
}
然后我希望能够传递正在使用的记录器processRequest
并使其可用于JSONBytes()
. 但是,我不确定将 JSON 结构与方法混合的含义:
type Foo struct {
RequestID string `json:"request_id"`
Response string `json:"response"`
Sugar *zap.SugaredLogger `json:"-"`
}
然后我可以在其中使用记录器JSONBytes()
。如果我尝试将它作为参数传递给 to JSONBytes(s)
,我会得到
resp (variable of type response.Response) cannot have dynamic type *response.Foo (wrong type for method JSONBytes (have func(s *go.uber.org/zap.SugaredLogger) []byte, want func() []byte))compilerImpossibleAssert
使记录器可用于JSONBytes()
.