如何封送匿名结构?

Mar*_*iwa 2 struct go

为什么{}在尝试封送匿名结构时会得到提示?

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    js, err := json.Marshal(struct{id int}{123})
    if err != nil {
        fmt.Println("error:", err)
    }
    os.Stdout.Write(js)
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/lEqJ1uj1ezS

tom*_*271 6

https://play.golang.org/p/XNAKovWGhxk

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    jsonString, err := json.Marshal(
        struct{
            Id int `json:"theKeyYouWantToUse"`
        } {
            123
        },
    )

    if err != nil {
        fmt.Println("error:", err)
    }

    os.Stdout.Write(jsonString)
}
Run Code Online (Sandbox Code Playgroud)

您没有导出id属性,请将其更改为ID


aer*_*ite 5

如果使用以下结构,Marshal 方法将忽略,id因为它未导出。

struct{id int}{123}
Run Code Online (Sandbox Code Playgroud)

您需要导出它们以保持它们在转换过程中。

在 Go 中,如果名称以大写字母开头,则会导出名称

js, _ := json.Marshal(struct{Id int}{123})
os.Stdout.Write(js)
// {"Id":123}
Run Code Online (Sandbox Code Playgroud)