【Go语言学习】——ini配置

ini配置


  • 逻辑步骤

    1.检测传入的结构体是不是指针类型,值类型不能再函数中修改值

    2.读取ini文件的内容,并且处理成按行划分的切片

    3.遍历切片中每一组数据,分类处理:

    ​ 3.1 对于非格式化的数据直接报错

    ​ 3.2 对于[xxxx]标题内容,先判断格式,在读取内容,然后存储结构体名称xxxx

    ​ 3.3 对于K=V的内容,分别存储key和value,然后先去利用结构体名册读取到对应结构体,再在结构体中找到key’对应的结构体字段,最后对这个字段先判断类型然后赋值

  • 实现代码

    package main
    
    import (
    	"errors"
    	"fmt"
    	"io/ioutil"
    	"reflect"
    	"strconv"
    	"strings"
    )
    
    // Mysql配置结构体
    type MysqlConfig struct {
         
    	Address  string `ini:"address"`
    	Port     int    `ini:"port"`
    	Username string `ini:"username"`
    	Password string `ini:"password"`
    }
    
    // Redis配置结构体
    type RedisConfig struct {
         
    	Host     string `ini:"host"`
    	Port     int    `ini:"port"`
    	Password string `ini:"password"`
    	Database int    `ini:"database"`
    	Test     bool   `ini:"test"`
    }
    
    // 嵌套结构,包装所有的类型的配置结构体
    type Config struct {
         
    	MysqlConfig `ini:"mysql"`
    	RedisConfig `ini:"redis"`
    }
    
    func loadIni(fileName string, data interface{
         }) (err error) {
         
    	// 0.参数校验:data必须是结构体指针类型
    	t := reflect.TypeOf(data)
    	// 检测参数是否是一个指针
    	if t.Kind() != reflect.Ptr {
         
    		err = errors.New("data param should be a pointer")
    		return
    	}
    	// 检测指针是否指向结构体
    	if t.Elem().Kind() != reflect.Struct {
         
    		err = errors.New("data param should be a struct pointer")
    		return
    	}
    	// 1.读文件获取字节类型的数据
    	b, err := i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值