前言
在项目开发中,经常需要把一些配置文件常量提取到统一配置文件进行维护,因为这样对于改变量以及维护非常方便,对于Java的Sringboot项目,有applocation.properties或者yml或者yaml等文件,go项目开发中,可以把需要维护的常量或者配置提取到yaml文件,因为YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态,对于项目修改配置非常方便
go安装yaml组件
使用以下命令安装依赖包
arduino
go get gopkg.in/yaml.v3
yaml使用
在项目中创建test.yaml配置文件
配置文件内容如下
yaml
hello:
name: 127.0.0.1
age: 3306
redis:
host: 127.0.0.1
port: 6379
password: 123456
读取yaml内容
使用程序读取yaml配置文件内容,内容如下:
go
package main
import (
"fmt"
"gopkg.in/yaml.v3"
"os"
)
type Config struct {
Hello `yaml:"hello"`
Redis `yaml:"redis"`
}
type Hello struct {
Name string `yaml:"name"`
Age int `yaml:"age"`
}
type Redis struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Password string `yaml:"password"`
}
func main() {
dataBytes, err := os.ReadFile("test.yaml")
if err != nil {
fmt.Println("读取文件失败:", err)
return
}
fmt.Println("yaml 文件的内容:\n", string(dataBytes))
config := Config{}
err = yaml.Unmarshal(dataBytes, &config)
if err != nil {
fmt.Println("解析 yaml 文件失败:", err)
return
}
fmt.Printf("config内容为:\n", config)
mp := make(map[string]any, 2)
err = yaml.Unmarshal(dataBytes, mp)
if err != nil {
fmt.Println("解析 yaml 文件失败:", err)
return
}
fmt.Println("内容为:", mp)
}
结果为:
使用yaml
可以指定对应配置文件名称
go创建yaml文件
go也可以通过程序生成yaml文件,程序如下
go
package main
import (
"fmt"
"gopkg.in/yaml.v3"
"os"
)
type Config struct {
Hello `yaml:"hello"`
Redis Redis `yaml:"redis"`
}
type Hello struct {
Name string `yaml:"name"`
Age int `yaml:"age"`
}
type Redis struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Password string `yaml:"password"`
}
func main() {
var data = Config{
Hello: Hello{
Name: "aaa",
Age: 12,
},
Redis: Redis{
Host: "127.0.0.1",
Port: 6379,
Password: "121321",
},
}
file, err := os.Create("./1.yaml")
defer func(file *os.File) {
err := file.Close()
if err != nil {
}
}(file)
if err != nil {
fmt.Println("创建文件失败:", err)
return
}
// 创建编码器
encoder := yaml.NewEncoder(file)
err = encoder.Encode(&data)
if err != nil {
fmt.Println("Error encoding YAML:", err)
return
}
fmt.Println("创建成功")
}
总结
gopkg.in/yaml.v3 是一个功能强大的 Go 库,用于解析和生成 YAML 数据,在开发中,可以将配置提取到yaml配置文件中,易于程序维护,可以提高开发效率,但是程序技术很多,每个人开发习惯不同,在开发中,根据个人喜好开发