Go语言将YAML配置文件转换为结构体
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)
}
代码解析
- 导入
gopkg.in/yaml.v2包:该包提供了解析YAML文件的函数和方法。 - 定义
SparkDefault结构体:该结构体包含了所有需要解析的YAML配置项,每个字段都使用yaml标签指定了在YAML文件中的对应键路径。 - 定义匿名结构体
config:该结构体包含一个SparkDefault类型的字段SparkDefaults,同样使用yaml标签指定了在YAML文件中的对应键路径。 - 使用
yaml.Unmarshal方法:该方法将YAML字符串解析为config结构体。 - 打印
SparkDefaults字段的值:最后,代码使用fmt.Printf打印出解析后的SparkDefaults字段的值。
注意点
- 在YAML字符串中,需要使用单引号来包裹字符串类型的键值。
- 需要确保代码中导入了正确的
yaml包。 - 在实际应用中,需要根据你的YAML文件结构和所需配置项调整结构体定义和代码实现。
总结
本文介绍了如何使用Go语言将YAML配置文件转换为结构体,并解析了代码实现和相关细节。通过使用gopkg.in/yaml.v2包,可以方便地将YAML配置文件解析为Go语言结构体,并进一步利用这些数据进行操作。
原文地址: https://www.cveoy.top/t/topic/pgnX 著作权归作者所有。请勿转载和采集!