猿问

带有字段标签的匿名结构之间的类型转换

我有一个 Open API 生成的模式,我想在我的处理函数中创建响应结构。但是当我想创建匿名结构时,我也需要再次编写字段标签。有没有不需要重复的解决方案?这是最小的例子


package main


// Response is generated by a tool in a separated file

type Response struct {

    Result *struct {

        Id int `json:"id"`

    } `json:"result,omitempty"`

}


func main() {

    var response Response


    response.Result = &struct {

        Id int `json:"id"`

    }{5}


    // This results in an error

    // cannot use &struct { Id int } literal (type *struct { Id int }) as type *struct { Id int "json:\"id\"" } in assignment

    response.Result = &struct {Id int}{5}

}

这个匿名结构是oapi-codegen的结果,当我在 api 定义的一部分中使用复杂类型components作为响应类型时。我想如果我使用一个CreateBookResponseResult类型,代码生成器不会生成一个匿名结构,但我会推迟这个选项,直到我可以。


components:

  CreateBookResponse:

    type: object

    properties:

      result:

        type: object

        properties:

          id:

            type: integer


幕布斯6054654
浏览 89回答 1
1回答

哆啦的时光机

使用命名类型。type Response struct {    Result *ResponseResult `json:"result,omitempty"`}type ResponseResult struct {        Id int `json:"id"`} var response Responseresponse.Result = &ResponseResult{Id: 5}
随时随地看视频慕课网APP

相关分类

Go
我要回答