Golang - 结构字段中的首都

时间:2014-07-19 06:27:06

标签: database struct go

我正在使用这个库来访问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)
}

在这种情况下,只有“age”字段已更新并插入我的数据库。

我在另一个案例中也注意到了这个问题 - 当我做这样的事情时:

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}

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

2 个答案:

答案 0 :(得分:34)

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

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

尽管如此,你仍然可以使用所谓的"标记"来解组不以大写字母开头的json字段。使用json包,这是要使用的语法:

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

有关详细信息,请参阅documentation

答案 1 :(得分:4)

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

您需要像这样定义结构:

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