«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вы обрабатываете ошибки во время маршалинга JSON в Golang?

Как вы обрабатываете ошибки во время маршалинга JSON в Golang?

Опубликовано 12 ноября 2024 г.
Просматривать:927

How do you Handle Errors During JSON Marshalling in Golang?

Обработка ошибок в маршаллинге Golang JSON

Структуры данных JSON не могут представлять циклические ссылки, а функция json.Marshal в Go не может их обрабатывать. В результате передача циклических структур в Marshal приводит к бесконечной рекурсии и панике во время выполнения.

Помимо циклических структур, json.Marshal также может возвращать ненулевые ошибки в ситуациях, когда он встречает неподдерживаемые типы или недопустимые значения.

Неподдерживаемые типы

Маршал возвращает ошибку UnsupportedTypeError, когда попытка маршалировать неподдерживаемый тип данных. Например:

import "encoding/json"

func main() {
    ch := make(chan int)
    _, err := json.Marshal(ch)
    if _, ok := err.(*json.UnsupportedTypeError); ok {
        // Error: Unmarshal: unsupported type: chan int
    }
}

Неподдерживаемые значения

Marshal также может возвращать UnsupportedValueError при попытке маршалирования недопустимого значения. Например:

import (
    "encoding/json"
    "math"
)

func main() {
    positiveInfinity := math.Inf(1)
    _, err := json.Marshal(positiveInfinity)
    if _, ok := err.(*json.UnsupportedValueError); ok {
        // Error: json: unsupported value:  Inf
    }
}

Понимая эти условия, разработчики могут корректно обрабатывать ошибки и гарантировать, что json.Marshal возвращает ожидаемые результаты или обрабатывает соответствующие ошибки.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3