> 백엔드 개발 > Golang > Golang Viper 구성 파일의 중첩 지도 데이터에 효율적으로 액세스하려면 어떻게 해야 합니까?

Golang Viper 구성 파일의 중첩 지도 데이터에 효율적으로 액세스하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-11-22 08:40:14
원래의
1026명이 탐색했습니다.

How Can I Efficiently Access Nested Map Data in Golang Viper Configuration Files?

Golang Viper로 지도 조각 읽기

Golang에서 Viper 라이브러리는 다양한 파일 형식의 구성 파일 작업을 단순화합니다. 그러나 중첩된 지도 데이터에 액세스할 때 개발자는 때때로 문제에 직면합니다.

문제

다음 HCL 구성 파일을 고려하세요.

interval = 10
statsd_prefix = "pinger"

group "dns" {
  target_prefix = "ping"
  target "dns" {
    hosts = [
      "dnsserver1",
      "dnsserver2"
    ]
  }
}
로그인 후 복사

viper.GetStringMap("group")을 사용하여 맵으로 "group" 섹션에 액세스할 때 문제가 발생합니다. 결과 구조는 아래와 같이 맵 조각입니다.

[]map[string]interface {} (len=1 cap=1) {
  map[string]interface {} (len=1) {
    dns: []map[string]interface {} (len=1 cap=2) { ... }
  }
}
로그인 후 복사

해결책

이러한 구조를 수동으로 처리하는 대신 Viper의 Unmarshal 기능은 다음을 제공합니다. 더 우아한 솔루션. 사용자 정의 구성 구조를 정의하면 Viper가 구성 파일을 객체로 직접 디코딩하도록 지시할 수 있습니다.

예를 들어 다음 구성 구조는 HCL 파일에 해당합니다.

type config struct {
    interval int `mapstructure:"interval"`
    statsdPrefix string `mapstructure:"statsd_prefix"`
    groups []group
}
type group struct {
    groupName string `mapstructure:"group"`
    targetPrefix string `mapstructure:"target_prefix"`
    targets []target
}
type target struct {
    targetName string `mapstructure:"target"`
    hosts []string `mapstructure:"hosts"`
}
로그인 후 복사

이 구조가 있으면 다음과 같이 구성 파일을 역마샬링할 수 있습니다.

var config config

err := viper.Unmarshal(&config)
if err != nil {
    t.Fatalf("unable to decode into struct, %v", err)
}
로그인 후 복사

이 접근 방식은 데이터 매핑 및 구문 분석을 자동화합니다. Golang 애플리케이션에서 중첩된 지도 데이터에 액세스하는 더 간단하고 효율적인 방법을 제공합니다.

위 내용은 Golang Viper 구성 파일의 중첩 지도 데이터에 효율적으로 액세스하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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