golang中读取文件的几种方式

golang中的文件的读取很多是做配置文件使用,还有是读取图像作为file类,存储至文件系统中,下面分别说明

一.配置文件读取

type GlobalConf struct {
	Db structdef.DbConf `json:"db"`
}
//配置文件中字母要小写,结构体属性首字母要大写
type DbConf struct {
	UserName    string `json:"username"`
	Password    string `json:"password"`
	Host        string `json:"host"`
	DataBase    string `json:"database"`
	LogMode     int    `json:"logMode"`
	MaxOpenConn int    `ymal:"maxopenconn"`
	MaxIdleConn int    `ymal:"maxidleconn"`
	MaxLifetime int    `ymal:"maxlifetime"`
}

var Config GlobalConf

1.Yaml文件的读取

配置文件名称:config.yaml

db: # 数据库配置(mysql),mysql服务部署 见部署手册,或基于TDSQL/CDB搭建
  username: "root" # 数据库用户名
  password: "*******" # 数据库密码
  host: "127.0.0.1:3306" # 数据库连接地址
  logmode: 4
  maxopenconn: 50  # 连接池最大连接数
  maxidleconn: 2   # 最大空闲连接
  maxlifetime: 30   # 空闲连接的超时时间

配置文件路径:conf/config.yaml

依赖:使用Init函数进行封装,依赖包为: "gopkg.in/yaml.v2"

1.读取路径,以项目的根目录为参考:根目录下的conf路径下的config.yaml文件,读取路径就为:conf/config.yaml

//从配置文件中读取所有的配置信息
func Init() {
	err := GetYamlConfig()
	if err != nil {
		//使用默认配置文件
	}
}

func GetYamlConfig() error {
	file, err := ioutil.ReadFile("conf/config.yaml") //读取的位置是从项目根目录作为当前目录
	if err != nil {
		log.Logger.Errorf("config int fail %s", err.Error())
		return err
	}
	err = yaml.Unmarshal(file, &Config)
	if err != nil {
		return err
	}
	log.Logger.Infof("config is %v", Config)
	return nil
}

2.json文件

配置文件名称:config.json

配置文件路径:conf/config.json

{
  "db": {
    "username": "root",
    "password": "molotest123",
    "host": "127.0.0.1:3306",
    "logmode": 4,
    "maxopenconn": 50,
    "maxidleconn": 2,
    "maxlifetime": 30
  }
}

程序实现:

func GetJsonConfig() error {
	file, _ := os.Open("conf/config.json")
	decoder := json.NewDecoder(file)

	err := decoder.Decode(&Config)
	if err != nil {
		return err
	}

	log.Logger.Infof("config is %v", Config)
	return nil
}

3.ini文件的读取

配置文件名称:config.ini

所在路径:conf/config.ini

文件内容

[db]
username="root" # 数据库用户名
password="******" # 数据库密码
host="127.0.0.1:3306" # 数据库连接地址
logmode= 4
maxopenconn= 50  # 连接池最大连接数
maxidleconn= 2   # 最大空闲连接
maxlifetime= 30   # 空闲连接的超时时间

引入的包为:github.com/go-ini/ini
代码实现:

	err := ini.MapTo(&Config, "conf/config.ini") //配置使用指针的方式接收
	if err != nil {
		return err
	}
	log.Logger.Infof("ini read config is %v", Config)
	return nil
}

二.文件的操作

golang中文件的操作使用系统自带的工具

1.打开本地文件:

	file, err := os.Open(localPic)
	if err != nil {
		logger.Error("open localPic fail:", err)
	}
	defer file.Close()

2.打开/创建本地copy的目的文件

	fd, err := os.OpenFile(localpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0660)
	if err != nil {
		return resp, err
	}

3.复制本地文件至目的文件

posted @ 2022-03-22 10:09  知更之始,博之于涵  阅读(1662)  评论(0编辑  收藏  举报