【问题标题】:Capitals in struct fields结构字段中的大写字母
【发布时间】:2022-03-13 21:53:02
【问题描述】:

我正在使用这个库来访问 CouchDB(具体来说是 cloudant)“github.com/mikebell-org/go-couchdb”,我注意到了一个问题。

当我将文件添加到数据库并传入结构时,只会添加以大写字母开头的结构的字段。

例如

type Person struct {
    name string
    Age  int
}

func main() {
    db, _ := couchdb.Database(host, database, username, password)
    joe := Person{
        name: "mike",
        Age:  190,
    }
    m, _ := db.PostDocument(joe)
}

在这种情况下,只有“年龄”字段被更新并插入到我的数据库中。

我在另一种情况下也注意到了这个问题 - 当我做这样的事情时:

type Sample struct {
    Name string
    age  int 
}


joe := Sample{
    Name: "xx",
    age:  23,
}

byt, _ := json.Marshal(joe)

post_data := strings.NewReader(string(byt))
fmt.Println(post_data)

在这种情况下,只会打印出名称:

output : &{{"Name":"xx"} 0 -1}

这是为什么?如果我想有一个小写的字段并在数据库中,这可能吗?

【问题讨论】:

    标签: json go struct


    【解决方案1】:

    这是因为只有以大写字母开头的字段被导出,或者换句话说,在当前包之外可见(在这种情况下是在 json 包中)。

    以下是引用此的规范部分:http://golang.org/ref/spec#Exported_identifiers

    不过,您可以使用所谓的“标签”来解组不以大写字母开头的 json 字段。对于 json 包,这是要使用的语法:

    type Sample struct {
        Name string `json:"name"`
        Age  int    `json:"age"`
    }
    

    有关更多信息,请参阅documentation

    【讨论】:

      【解决方案2】:

      json 包只有 stringfiy 字段以大写字母开头。 见http://golang.org/pkg/encoding/json/

      结构值编码为 JSON 对象。每个导出的结构字段都成为对象的成员,使用字段名称作为对象键,除非由于以下原因之一省略了该字段。

      你需要像这样定义结构:

      type Sample struct{
          Name string `json:"name"`
          Age int `json:"age"`
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        相关资源
        最近更新 更多