Какие типы данных в Go используются для работы с JSON?

Ответ

В Go для работы с JSON, как правило, используют два основных подхода:

  1. Структуры (struct) с тегами полей (рекомендуемый способ)

    Это идиоматичный и наиболее предпочтительный способ для работы с JSON, структура которого заранее известна. Он обеспечивает типобезопасность и прозрачность кода.

    import "encoding/json"
    
    type Person struct {
        Name   string   `json:"name"`
        Age    int      `json:"age,omitempty"` // omitempty - не включать в JSON, если значение нулевое
        Skills []string `json:"skills"`
    }

    Для кодирования (Go -> JSON) и декодирования (JSON -> Go) используются функции json.Marshal и json.Unmarshal из стандартной библиотеки encoding/json.

  2. Карта map[string]interface{}

    Этот способ используется, когда структура JSON заранее неизвестна, или она очень динамична. Он похож на работу с JSON в скриптовых языках.

    var data map[string]interface{}
    jsonData := []byte(`{"name":"Alice","age":25}`)
    json.Unmarshal(jsonData, &data)
    // data["name"] будет равно "Alice"

    Недостаток: Теряется типобезопасность. Для доступа к значениям требуются приведения типов (data["age"].(float64)), что может привести к панике во время выполнения, если тип окажется другим.