go中读取配置文件的几种方式

首先说,json。json的读取,序列化成对象以及反序列化回去都比较简单。

json:

首先看一下json的结构。
这个json名称是 host.json

{
    "version": "1212",
    "config": {
        "httpqps": 3,
        "weight": 4
    }
}

然后是代码:
这个文件的名称是analysisjson.go

package main

import (
	"fmt"
	"io/ioutil"
)
import "encoding/json"
type Config struct {
	Httpqps int
	Weight  int
}



type Result struct {
	Version  string
	Config Config
}

func main() {

	// json序列化成变成对象文件-----------------------------------------------------begin
	bytes, err := ioutil.ReadFile("host.json")

	var r Result
	err = json.Unmarshal([]byte(bytes), &r)
	if err != nil {
		fmt.Printf("err was %v", err)
	}

	fmt.Println(r.Version)
	fmt.Println(r.Config.Weight)

	// json序列化成变成对象文件-----------------------------------------------------end

	// 对象反序列成json文件---------------------------------------------------------begin
	var c Config
	var msg Result
	c.Httpqps = r.Config.Httpqps
	c.Weight = r.Config.Weight
	msg.Version = r.Version
	msg.Config = c
	b, er := json.Marshal(msg)
	if er == nil {
		fmt.Println(string(b))
	}

	// 对象反序列成json文件---------------------------------------------------------end

}


解析的结果是:

1212
4
{"Version":"1212","Config":{"Httpqps":3,"Weight":4}}

复杂的json文件的话,类比一下也能出来。

重点:如果你不想麻烦,那么把这两个文件放在src目录下,直接运行即可,一定要注意这个路径的问题,很重要,很重要,很重要,往往就是你代码写的没问题,你的路径出错了,导致你手忙脚乱的。

ini格式的文件:

以conf为后缀名的文件,就是ini这个格式的文件
配置文件:
名称是database.conf

[mysql]
username=root
password=123456
url=127.0.0.1:3306
[redis]
address=127.0.0.1:6379

代码:
名称是
conf_load_main.go
注意了,这里需要引入一个包。你去搜一下gopkg.in/gcfg.v1,你可以通过go get或者用git clone把这个第三方包引进来,然后,放在你的GOPATH路径下的src下新建一个文件夹github.com,放在下边然后引入时像我这样引入即可,就是你安装go时的设置的工作路径。如果你出现了问题,那就是你问题,好好操作一番。还有一点注意提前在你的c盘建一个以database.conf命名的文件。

package main

import (
	"fmt"
	"gopkg.in/gcfg.v1"
	"io/ioutil"
	"os"
)

type Mysql struct {
	Username string
	Password string
	Url string
}

type Redis struct {
	Address string
}

type Test struct {
	Mysql Mysql
	Redis Redis
}


func main()  {

	var test Test
	var err error

	// read config from file
	err = gcfg.ReadFileInto(&test, "database.conf")
	if err != nil {
		fmt.Println("cuowu")
	}
	fmt.Println(test.Mysql)




   // 这部分是把对象反解析成ini文件
	// bytes, err := ioutil.ReadFile("kimny.conf")
	fn := "C:\\database.conf"

	str := "[mysql]" +"\n"+ "username="+ test.Mysql.Username + "\n" + "password="+test.Mysql.Password+"\n"+"url="+test.Mysql.Url+"\n"+"[redis]"+"\n"+"address="+test.Redis.Address

	s := []byte(str)
	// os.ModeAppend
	ioutil.WriteFile(fn, s, os.ModeAppend)
	rf, _ := ioutil.ReadFile(fn)
	fmt.Printf("%s", rf)
}

结果:

{root 123456 127.0.0.1:3306}
[mysql]
username=root
password=123456
url=127.0.0.1:3306
[redis]
address=127.0.0.1:6379

同样如果你不想麻烦,把这两个文件放在src下,一定要注意这路径的问题。

发布了123 篇原创文章 · 获赞 80 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_38101105/article/details/101379218