gpt4 book ai didi

go - Json 解码为结构,根据路径使用不同的请求类型

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:25 25 4
gpt4 key购买 nike

我想将 json 解码为结构。我的结构看起来像这样:

type message struct {
Request baseRequest `json:"request"` //actually there should be other type here, but I can't think of what it could be
Auth auth `json:"auth"`
}

type baseRequest struct {
Foo string `json:"foo" validate:"required"`
}

type createRequest struct {
baseRequest
Bar string `json:"bar" validate:"required"`
}

type cancelRequest struct{
baseRequest
FooBar string `json:"foo_bar" validate:"required"`
}

我想将 createRequestbaseRequest 组合起来。我所有的代码都围绕在责任链模式中传递 message 类型。我已经实现了一个处理程序,它创建一个指向空 message 结构的指针,该结构由 jsonReader() 函数使用。对于 /create 路径,我想使用 createRequest 而不是 baseRequest,对于 /cancel 我想使用的路径取消请求。例如:

func (factory *HandlerFactory) Create() http.Handler {
create := func() *message { return &message{} }
return factory.defaultChain(createNewMessage, nil)
}

我想将 message.Request() 的类型更改为 createRequest。并在:

func (factory *HandlerFactory) Cancel() http.Handler {
create := func() *message { return &message{} }
return factory.defaultChain(createNewMessage, nil)
}

我想将消息请求的类型更改为cancelRequest。我怎样才能在 Go 中实现类似的目标?

最佳答案

不幸的是,您尝试做的并不是真正的 Go 工作方式,因为 Go 没有多态性 - createRequest 和 cancelRequest 不继承自 baseRequest,它们包含一个 baseRequest。因此,当您的消息结构中有 baseRequest 时,它只能是 baseRequest。

您可能需要为每条消息使用不同的类型。一个用于取消请求,另一个用于创建请求。

这里是 an article讨论 Go 中的继承和组合,并将其与 Java 进行对比。它应该可以帮助您了解结构嵌入在 Go 中的工作原理。

关于go - Json 解码为结构,根据路径使用不同的请求类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48993153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com