GO отличается от PHP и JS.Вместо того, чтобы быть простым в использовании, он нацелен на то, чтобы быть явным и надежным.
Для анализа тела JSON в запросе мы должны иметь строгое определение структуры типа для описания структуры, которая получает полезную нагрузку.Вот как мы можем контролировать поля, которые должны поддерживаться.Это важно, поскольку каждое поле имеет свой собственный тип, и синтаксический анализ не выполняется, если строка из запроса не соответствует этому типу.
type RequestBody struct {
User User `json:"user"`
Profile Profile `json:"profile"`
}
type User struct {
UserName string `json:"username"`
Password string `json:"password"`
}
type Profile struct {
FirstName string `json:"firstname"`
LastName string `json:"lastname"`
Files []string `json:"files"`
}
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
decoder := json.NewDecoder(r.Body)
var req RequestBody
err := decoder.Decode(&req)
if err != nil {
// log error and return 400 to caller
return
}
// Use req
}