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