Golang - Capitals в строковых полях
Я использую эту библиотеку для доступа к couchDB (облачный, чтобы быть конкретным) "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}
Почему это? и если я хотел бы иметь поле с нижним регистром и быть внутри базы данных, возможно ли это?
Ответы
Ответ 1
Это связано с тем, что экспортируются только поля, начинающиеся с большой буквы, или, другими словами, видимые за пределами текущего пакета (и в этом случае в пакете json
).
Вот часть спецификаций, относящихся к этому: http://golang.org/ref/spec#Exported_identifiers
Тем не менее, вы можете отменить json-поля, которые не начинаются с заглавных букв, используя так называемые "теги". С пакетом json
это синтаксис для использования:
type Sample struct {
Name string `json:"name"`
Age int `json:"age"`
}
Подробнее об этом см. в документации .
Ответ 2
В пакете json только строковые поля начинаются с заглавной буквы.
см http://golang.org/pkg/encoding/json/
Вы должны определить структуру следующим образом:
type Sample struct{
Name string 'json:"name"'
Age int 'json:"age"'
}