동적 키를 사용하여 Go 코드를 구문 분석하는 YAML
동적 키가 포함된 YAML 파일의 Go 코드를 구문 분석하려면 다음 단계를 따르세요.
1.yaml을 설치합니다. 라이브러리:
go get gopkg.in/yaml.v2
2. 모델 구조 정의:
표현할 구조를 생성합니다. YAML 데이터. 가능한 키를 모두 알고 있다면 일반 필드를 사용하여 정의할 수 있습니다. 그렇지 않으면 map[string]interface{} 필드를 사용하여 동적 키를 포함할 수 있습니다.
3. 사용자 정의 Unmarshaler 사용(선택 사항):
YAML 데이터 구문 분석 방법을 사용자 정의해야 하는 경우 사용자 정의 Unmarshaler를 사용할 수 있습니다. 이는 동적 키나 기타 복잡한 구문 분석 시나리오를 처리하는 데 도움이 될 수 있습니다.
4. YAML 데이터 구문 분석:
yaml.Unmarshal 함수를 사용하여 YAML 데이터를 구문 분석하고 모델 구조로 역직렬화합니다.
예:
다음 예는 동적 키를 사용하여 YAML 파일을 구문 분석하는 방법을 보여줍니다.
package main
import (
"fmt"
"gopkg.in/yaml.v2"
)
var data = `
---
development:
skip-header-validation: true
V1:
current: "1.0.0"
mime_types:
- application/vnd.company.jk.identity json;
- application/vnd.company.jk.user json;
- application/vnd.company.jk.role json;
- application/vnd.company.jk.scope json;
- application/vnd.company.jk.test json;
skip-mime-type-validation: true
skip-version-validation: true
V2:
current: "2.0.0"
mime_types:
- application/vnd.company.jk.identity json;
- application/vnd.company.jk.user json;
- application/vnd.company.jk.role json;
- application/vnd.company.jk.scope json;
- application/vnd.company.jk.test json;
`
type MajorVersion struct {
Current string `yaml:"current"`
MimeTypes []string `yaml:"mime_types"`
SkipVersionValidation bool `yaml:"skip-version-validation"`
SkipMimeTypeValidation bool `yaml:"skip-mime-type-validation"`
}
type Environment struct {
SkipHeaderValidation bool
Versions map[string]MajorVersion `yaml:",inline"`
}
func main() {
e := map[string]Environment{}
if err := yaml.Unmarshal([]byte(data), &e); err != nil {
fmt.Println(err.Error())
}
fmt.Printf("%#v\n", e)
}
출력:
map[string]main.Environment{ "development": { SkipHeaderValidation: true, Versions: { "V1": { Current: "1.0.0", MimeTypes: {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"}, SkipVersionValidation: true, SkipMimeTypeValidation: true, }, "V2": { Current: "2.0.0", MimeTypes: {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"}, SkipVersionValidation: false, SkipMimeTypeValidation: false, }, }, }, }
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3