通常我们在使用数据库或者其他配置的时候都会有很多敏感信息,如果直接写在代码里会造成信息泄露,而且如果数据库的信息或者其他配置发生变动时,维护起来也很不方便。所以通常情况下使用配置文件的方式。
项目根目录创建config.yml
配置文件 {#%E9%A1%B9%E7%9B%AE%E6%A0%B9%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BAconfig.yml%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6}
wechatHttp:
# 请求api的验证
token: 123
port: 8000
model: debug
# model: release
iHttp:
post地址
======
url: http://127.0.0.1:8090
authorization: 6r9PEIHcLQoLSn6B512iAiN4fWf4XK36
机器人ID
=====
robotWxId: wxid_x7t4
主人ID
====
`masterWxId: wxid_wv
redis:
host: localhost
port: 6379
pwd: 123456
db: 0
`
创建config.go
读取yml配置 {#%E5%88%9B%E5%BB%BAconfig.go%E8%AF%BB%E5%8F%96yml%E9%85%8D%E7%BD%AE}
package config
import (
"fmt"
"github.com/spf13/viper"
"os"
)
// Config 保存程序的所有配置信息
var Config = new(AppConfig)
type AppConfig struct {
\*WechatHttp `yaml:"wechatHttp"`
\*IHttp `yaml:"iHttp"`
\*Redis `yaml:"redis"`
}
type WechatHttp struct {
Token string `yaml:"token"`
Port string `yaml:"port"`
Model string `yaml:"model"`
}
type IHttp struct {
URL string `yaml:"url"`
RobotWxId string `yaml:"robotWxId"`
MasterWxId string `yaml:"masterWxId"`
Authorization string `yaml:"authorization"`
}
type Redis struct {
Host string `yaml:"host"`
Port string `yaml:"port"`
Pwd string `yaml:"pwd"`
Db int `yaml:"db"`
}
func InitConf() {
//获取项目的执行路径
path, err := os.Getwd()
if err != nil {
panic(err)
}
config := viper.New()
config.AddConfigPath(path) //设置读取的文件路径
config.SetConfigName("config") //设置读取的文件名
config.SetConfigType("yml") //设置文件的类型
err = config.ReadInConfig()
if err != nil {
// 处理读取配置文件的错误
fmt.Printf("viper.ReadInConfig() failed, err:%v\\n", err)
return
}
// 配置信息绑定到结构体变量
err = config.Unmarshal(Config)
if err != nil {
fmt.Printf("viper.Unmarshal() failed, err:%v\n", err)
}
`}
`
在main函数中初始化读取配置 {#%E5%9C%A8main%E5%87%BD%E6%95%B0%E4%B8%AD%E5%88%9D%E5%A7%8B%E5%8C%96%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE}
config.InitConf()
package main
import (
"wechat-http/config"
"wechat-http/cron"
"wechat-http/route"
"wechat-http/util"
"wechat-http/util/redis"
)
func main() {
config.InitConf()
redis.InitRedis()
cron.InitMyCron()
util.InitServerInfo()
r := route.Setup()
r.Run(":" + config.Config.WechatHttp.Port)
}