> 백엔드 개발 > Golang > 서로 다른 데이터 유형을 사용하여 Go 배열을 역마샬링하는 방법은 무엇입니까?

서로 다른 데이터 유형을 사용하여 Go 배열을 역마샬링하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-14 02:28:09
원래의
634명이 탐색했습니다.

How to Unmarshal a Go Array with Disparate Data Types?

Go에서 서로 다른 유형의 배열 역마샬링

키-값 쌍을 처리할 때 역마샬링은 간단합니다. 그러나 혼합된 유형의 배열을 고유한 순서로 역마샬링하는 것은 어려운 일입니다. 이 문제를 해결하려면 다양한 데이터 유형을 유연하게 수용할 수 있는 솔루션이 필요합니다.

Go 프로그래밍 언어는 이 시나리오를 처리하기 위한 우아한 옵션을 제공합니다. 유형 어설션과 함께 인터페이스{} 유형을 활용하면 각 배열 요소의 기본 유형을 동적으로 분석하고 그에 따라 역마샬링할 수 있습니다.

문제가 있는 코드를 다시 살펴보고 이 기술을 활용하도록 수정해 보겠습니다.

package main

import (
    "encoding/json"
    "fmt"
)

func decodeJSON(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    }
}

func checkTypeAndDecode(k string, v interface{}) {
    switch vv := v.(type) {
    case string:
        fmt.Printf("%v: is string - %q\n", k, vv)
    case int:
        fmt.Printf("%v: is int - %q\n", k, vv)
    default:
        fmt.Printf("%v: ", k)
        decodeJSON(v)
    }
}

func main() {
    my_json := `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("JSON:")
        decodeJSON(f)
    }
}
로그인 후 복사

이 수정된 코드는 decodeJSON 함수를 사용하여 JSON 구조를 재귀적으로 분석하여 각 요소의 데이터 유형을 식별하고 적절한 표현을 인쇄합니다. 복잡한 중첩 구조의 경우 decodeJSON에 대한 중첩 호출이 수행됩니다.

이 수정된 코드로 생성된 출력은 데이터 유형에 따라 각 요소가 어떻게 올바르게 식별되고 인쇄되는지 보여줍니다.

JSON:
is a map:
an_array: is an array:
0: is string - "with_a string"
1: is a map:
and: is string - "some_more"
different: is an array:
0: is string - "nested"
1: is string - "types"
로그인 후 복사

Go의 유형 처리에 대한 이러한 향상된 이해를 통해 다양한 유형의 데이터 유형이 혼합된 배열을 자신있게 역마샬링할 수 있으므로 애플리케이션에서 정확하고 일관된 데이터 표현이 보장됩니다.

위 내용은 서로 다른 데이터 유형을 사용하여 Go 배열을 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿