Go语言将YAML配置文件转换为结构体

本文将介绍如何使用Go语言将以下YAML配置文件转换为结构体:

sparkdefaults:
  spark.eventLog.enabled: true
  spark.eventLog.dir: 'oss://sparkoss0725/225171'
  spark.hadoop.fs.s3a.access.key: '01C9032784E94760AC25FEF7A05859EA5805'
  spark.hadoop.fs.s3a.secret.key: '8F56E05FA2E04A249E309ACACCC7D1319114'
  spark.hadoop.fs.s3a.impl: org.apache.hadoop.fs.s3a.S3AFileSystem
  spark.hadoop.fs.s3a.endpoint: 'obs-lf-internal-pre.cucloud.cn'
  spark.hadoop.fs.s3a.connection.ssl.enabled: false
  spark.hadoop.fs.s3a.paging.maximum: 1000
  spark.kubernetes.driver.podTemplateFile: ''
  spark.kubernetes.executor.podTemplateFile: ''
  spark.kubernetes.authenticate.driver.serviceAccountName: spark
  spark.kubernetes.container.image: 'guigu-registry.cucloud.cn/emrc/spark:v3.1.3'

代码实现

package main

import (
	"fmt"
	"gopkg.in/yaml.v2"
	"log"
)

// Spark默认配置
type SparkDefault struct {
	OSSDir              string `yaml:"spark.eventLog.dir"`
	AccessKey           string `yaml:"spark.hadoop.fs.s3a.access.key"`
	SecretKey           string `yaml:"spark.hadoop.fs.s3a.secret.key"`
	EndPoint            string `yaml:"spark.hadoop.fs.s3a.endpoint"`
	SSLEnabled          string `yaml:"spark.hadoop.fs.s3a.connection.ssl.enabled"`
	LocalShuffleEnabled string `yaml:"spark.local.shuffle.enabled"`
	SkewJoinEnabled     string `yaml:"spark.sql.adaptive.skewJoin.enabled"`
	AdaptiveEnabled     string `yaml:"spark.sql.adaptive.enabled"`
	JoinReorderEnabled  string `yaml:"spark.sql.cbo.joinReorder.enabled"`
	DriverPodTplPath    string `yaml:"spark.kubernetes.driver.podTemplateFile"`
	ExecutorPodTplPath  string `yaml:"spark.kubernetes.executor.podTemplateFile"`
	ServiceAccountName  string `yaml:"spark.kubernetes.authenticate.driver.serviceAccountName"`
	Image               string `yaml:"spark.kubernetes.container.image"`
}

func main() {
	yamlString := `
sparkdefaults:
  spark.eventLog.enabled: true
  spark.eventLog.dir: 'oss://sparkoss0725/225171'
  spark.hadoop.fs.s3a.access.key: '01C9032784E94760AC25FEF7A05859EA5805'
  spark.hadoop.fs.s3a.secret.key: '8F56E05FA2E04A249E309ACACCC7D1319114'
  spark.hadoop.fs.s3a.impl: org.apache.hadoop.fs.s3a.S3AFileSystem
  spark.hadoop.fs.s3a.endpoint: 'obs-lf-internal-pre.cucloud.cn'
  spark.hadoop.fs.s3a.connection.ssl.enabled: false
  spark.hadoop.fs.s3a.paging.maximum: 1000
  spark.kubernetes.driver.podTemplateFile: ''
  spark.kubernetes.executor.podTemplateFile: ''
  spark.kubernetes.authenticate.driver.serviceAccountName: spark
  spark.kubernetes.container.image: 'guigu-registry.cucloud.cn/emrc/spark:v3.1.3'
`

	var config struct {
		SparkDefaults SparkDefault `yaml:"sparkdefaults"`
	}

	err := yaml.Unmarshal([]byte(yamlString), &config)
	if err != nil {
		log.Fatalf("Failed to unmarshal YAML: %v", err)
	}

	fmt.Printf("%+v\n", config.SparkDefaults)
}

代码解析

  1. 导入gopkg.in/yaml.v2:该包提供了解析YAML文件的函数和方法。
  2. 定义SparkDefault结构体:该结构体包含了所有需要解析的YAML配置项,每个字段都使用yaml标签指定了在YAML文件中的对应键路径。
  3. 定义匿名结构体config:该结构体包含一个SparkDefault类型的字段SparkDefaults,同样使用yaml标签指定了在YAML文件中的对应键路径。
  4. 使用yaml.Unmarshal方法:该方法将YAML字符串解析为config结构体。
  5. 打印SparkDefaults字段的值:最后,代码使用fmt.Printf打印出解析后的SparkDefaults字段的值。

注意点

  • 在YAML字符串中,需要使用单引号来包裹字符串类型的键值。
  • 需要确保代码中导入了正确的yaml包。
  • 在实际应用中,需要根据你的YAML文件结构和所需配置项调整结构体定义和代码实现。

总结

本文介绍了如何使用Go语言将YAML配置文件转换为结构体,并解析了代码实现和相关细节。通过使用gopkg.in/yaml.v2包,可以方便地将YAML配置文件解析为Go语言结构体,并进一步利用这些数据进行操作。


原文地址: https://www.cveoy.top/t/topic/pgnX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录