我正在使用这个库访问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}
为什么会这样呢?如果我想有一个小写的字段,并且在数据库内部,这是可能的吗?
3条答案
按热度按时间t9aqgxwy1#
这是因为只导出以大写字母开头的字段,换句话说,在当前包之外可见(在本例中是在
json
包中)。以下是与此相关的规范部分:http://golang.org/ref/spec#Exported_identifiers
尽管如此,您仍然可以使用所谓的“tags”来解组不以大写字母开头的json字段。对于
json
包,使用的语法如下:有关详细信息,请参阅文档。
pdtvr36n2#
json包仅字符串字段以大写字母开头。参见http://golang.org/pkg/encoding/json/
结构值编码为JSON对象。每个导出的结构字段都成为对象的成员,使用字段名作为对象键,除非该字段由于以下原因之一而被省略。
您需要像这样定义该结构:
ejk8hzay3#
json.Marshal方法struct-in field-i只接受以大写字母开头的字段
json包只访问struct类型的导出字段(以大写字母开始的字段),因此只有struct类型的导出字段才会出现在JSON输出中。