go 读取 json 配置文件

引言

go 读取 json 配置文件,主要有两个知识点:一是文件的读取,二是 json 数据的处理。

序列化与反序列化

对 json 数据的处理往往指的是数据的序列化和反序列化。

把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入到磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化。

go 有内置对 json 数据的处理包 “encoding/json”。

序列化为 json 格式:

data, err := json.Marshal(infos)

反序列化 json 数据:

err := json.Unmarshal(str, &info)

文件读取

配置文件的读取

config.json

{
  "userName":"root",
  "password":"",
  "host":"localhost",
  "port":"3306",
  "dbName": "test",
  "tableName":"table"
}

config.go

package main

import (
	"encoding/json"
	"fmt"
	"sync"
	io "io/ioutil"
)

//定义配置文件解析后的结构
type UserInfo struct {
	UserName  string `json:userName`
	Password  string `json:password`
	Host      string `json:host`
	Port  	  string `json:port`
	DbName    string `json:dbName`
	TableName string `json:tableName`
}


var UserIn UserInfo
var file_locker sync.Mutex //config file locker

func InitConfig() bool {
	conf, bl := LoadConfig("./config.json") //get config struct
	if !bl {
		fmt.Println("InitConfig failed")
		return false
	}
	UserIn = conf
	return true
}

/*************************************************
Function: LoadConfig
Description: read config file to config struct
@parameter filename: config file
Return: Config,bool
*************************************************/

func LoadConfig(filename string) (UserInfo, bool) {
	var conf UserInfo
	file_locker.Lock()
	data, err := io.ReadFile(filename) //read config file
	file_locker.Unlock()
	if err != nil {
		fmt.Println("read json file error")
		return conf, false
	}
	datajson := []byte(data)
	err = json.Unmarshal(datajson, &conf)
	if err != nil {
		fmt.Println("unmarshal json file error")
		return conf, false
	}
	return conf, true
}

func main() {
	bl := InitConfig()
	if !bl {
		fmt.Println("init config failed")
		return
	}
}

参考文章

https://blog.csdn.net/benben_2015/article/details/78917374
https://blog.csdn.net/luckytanggu/article/details/79795357

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值