go语言的魔幻旅程36-go的配置文件解析

本文介绍了Go语言中处理配置文件的常见格式,包括yaml、toml、json和ini。通过示例代码展示了如何读取和解析这四种类型的配置文件,强调了在项目开发中将配置信息从代码中分离到配置文件的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大浪淘沙,洗净铅华

不管是在哪一家公司,人员的流动总是无时无刻存在的,尤其在一些规模较大的公司,高峰的时期每天入职、离职几百人算是非常稀松平常的事情,特别是在一些特殊的时期,人员日均流动上千人也是可能存在的,基本上可以这样来讲,幻想在一家公司干到老的想法对于绝对部分的人而言是不太现实的,铁打的营盘水流的兵,对于底层的小兵,人员流动在大,终究算起来也不是什么大不了的事情,只要核心团队成员稳定,依然稳如泰山,在这样的情形下,只有不断的夯实自身能力,才能稳定的摆脱内卷的职场环境。

go的配置文件

对于绝大部分的项目来讲,前期的编码过程中可能由于各种各样的原因将一些重要的信息hard code 在了代码里,随着开发工作的持续,这样带来的坏处会不断的暴露出来,出于后续开发人员集成好维护的原则,最终还是需要将这些代码挪到指定的配置文件里。因此,有必要掌握一些常见的配置文件相关的知识。下面将针对常见的yaml、toml、json、ini文件展开讲解。


1、yaml配置文件

//conf.yaml

host: localhost:3306
user: xiaowang
pwd: 123456
dbname: test

//解析代码

import (
	"fmt"
	"gopkg.in/yaml.v2"
	"io/ioutil"
)

type conf struct {
	Host string `yaml:"host"`
	User string `yaml:"user"`
	Pwd string `yaml:"pwd"`
	Dbname string `yaml:"dbname"`
}

func (c *conf) getConf() *conf {
	yamlFile, err := ioutil.ReadFile("conf.yaml")
	if err != nil {
		fmt.Println(err.Error())
	}
	err = yaml.Unmarshal(yamlFile, c)
	return c
}

func main() {
	var c conf
	conf := c.getConf()
	fmt.Println(conf.Host, conf.User, conf.Dbname)
}

2、toml配置文件

//conf.toml文件

# id
ID = 3
# name
Name = "TigerwolfC"
# weight
Weight = 58.0
# books
Books = ["Golang", "C++", "Python"]
Sex = true
#friend Friend都可以
[friend]
Age = 28
Name = "chen_peggy"

//解析文件

import (
	"fmt"
	"github.com/BurntSushi/toml"
	"log"
)


type Person struct {
	ID uint32
	Sex bool
	Name string
	Weight float32
	Friend *Friends
	Books []string
}

type Friends struct {
	Age int
	Name string
}

func main() {
	var cp Person
	if _, err := toml.DecodeFile("conf.toml", &cp); err != nil {
		log.Fatal(err)
	}

	fmt.Println(cp.Name,cp.ID)
}

3、json文件

//conf.json

{
  "enabled": true,
  "path": "/usr/local"
}

//解析文件

import (
	"encoding/json"
	"fmt"
	"log"
	"os"
)


type Conf struct {
	Enable bool
	Path string
}

func main() {
	file, err := os.Open("conf.json")
	if err != nil {
		log.Fatal(err)
	}

	defer file.Close()
	decorder := json.NewDecoder(file)

	var c Conf
	err = decorder.Decode(&c)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(c.Path, c.Enable)
}

4、ini配置文件

//conf.ini

app_name = awesome web

# possible values: DEBUG, INFO, WARNING, ERROR, FATAL
log_level = DEBUG

[mysql]
ip = 127.0.0.1
port = 3306
user = dj
password = 123456
database = awesome

[redis]
ip = 127.0.0.1
port = 6381

//解析文件

import (
	"fmt"
	"github.com/go-ini/ini"
	"log"
)

func main () {

	c, err := ini.Load("conf.ini")
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(c.Section("").Key("app_name").String())
	fmt.Println(c.Section("").Key("log_level").String())
	fmt.Println(c.Section("mysql").Key("ip").String())
}

小结

关于go的配置文件共讲解了yaml、toml、json、ini几种格式的配置文件,总体而言并不是很难,但是由于历史的原因ini配置文件存在一定的缺陷,多用于windows平台, json文件不能写注释,用作配置文件也比较少,其他的如toml、yaml用的相对就广一些。希望以上这些知识点能扎实掌握吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值