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"'
}