当前位置: 首页 > news >正文

郴州网站制作公司电话网站网站建设教程

郴州网站制作公司电话,网站网站建设教程,画网页前端界面的软件,做公司网站需要有座机吗1. 配置相关概念 在项目开发过程中#xff0c;一旦涉及到与第三方中间件打交道就不可避免的需要填写一些配置信息#xff0c;例如 MySQL 的连接信息、Redis 的连接信息。如果这些配置都采用硬编码的方式无疑是一种不优雅的做法#xff0c;有以下缺陷#xff1a; 不同环境…1. 配置相关概念 在项目开发过程中一旦涉及到与第三方中间件打交道就不可避免的需要填写一些配置信息例如 MySQL 的连接信息、Redis 的连接信息。如果这些配置都采用硬编码的方式无疑是一种不优雅的做法有以下缺陷 不同环境开发环境、测试环境、线上环境之间无法做到环境隔离信息分散无法做到集中统一管理与业务代码相耦合无法灵活调整 因此配置模块应运而生这也是为什么在 Go 项目中需要引入 viper 配置模块的原因 1.1 配置的来源与优先级 在项目中我们可以从不同地方读取配置常见的配置信息的来源有如下几类 命令行参数往往是启动项目时读取的比如 mockgen 命令行有 source、destination、package等等参数环境变量配置信息也可以从操作系统当中设置的环境变量中读取本地配置文件比如在 Java 项目中常常会用 application.yaml 类似的格式保存配置信息远程配置中心这是一个独立的服务比如 nacos、etcd 就是常见的配置中心 对于上面常见的四种配置来源如果相互之间冲突会有什么影响呢这就涉及到配置来源的优先级了一般来说优先级如下命令行启动参数 本地配置文件 - 系统环境变量 - 远程配置中心 温馨提示上述优先级排列仅个人观点不同公司有不同的规范标准 2. viper 简介 viper 是一个 Go 项目当中的配置框架在项目中引入 viper 可以轻松的读取配置信息当中设定的参数并在项目中加以使用 ⭐ viper项目地址https://github.com/spf13/viper 3. viper 快速入门 3.1 viper 读取配置文件 首先我们需要先在项目中编写配置文件内容如下 db:mysql:# mysql dsn连接字符串dsn: root:QWEzxc123456tcp(localhost:3306)/webook redis:# redis 连接地址addr: localhost:6379该配置文件对应的存储路径位于config/dev.yaml step1首先我们需要设定好读取的配置文件的名称以及文件后缀对应 API 如下 AddConfigPath设定配置文件所在跟路径SetConfigName设定配置文件名称SetConfigType设定配置文件类型SetConfigFile设定配置文件路径可以替换上述三个参数SetDefault设定默认值ReadInConfig读取配置文件 func InitViperLocal() {// 1. 设置配置文件路径viper.AddConfigPath(config)// 2. 设置配置文件名称viper.SetConfigName(dev)// 3.设置配置文件类型viper.SetConfigType(yaml)// 4. 进行读取err : viper.ReadInConfig()if err ! nil {panic(err)} }step2然后我们就可以尝试在项目中进行读取对应 API 如下 GetString读取指定 key 对应的字符串数据UnmarshalKey读取指定 key 对应的数据到反序列化到指定结构体当中 func main() {InitViperLocal()// 1. 读取字符串数据dsn : viper.GetString(db.mysql.dsn)fmt.Println(dsn)// 2. 读取数据反序列到结构体当中var dbConfig DBConfigerr : viper.UnmarshalKey(db.mysql, dbConfig)if err ! nil {panic(err)}fmt.Println(dbConfig) }程序运行结果 温馨提示如果在 GoLand 中无法读取配置文件路径有可能是因此 Working Directory 工作目录的设置错误在 IDE 做相应调整即可 3.2 viper 读取启动参数 viper 还有一个特别好用的特性可以通过读取命令行参数实现不同环境配置文件的隔离比如在此项目中我们设定的配置文件路径为config/dev.yaml因此我们在命令行参数中指定为--configconfig/dev.yaml如果想要设定测试环境就可以指定命令行参数为--configconfig/test.yaml因此只需要使用 viper 读取命令行参数来设定配置文件路径即可 step1在 Goland 中设定运行时的启动命令行参数 step2首先我们需要读取命令行当中的参数对应 API 如下 pflag.String设置从命令行中读取的参数名称、默认值、说明pflag.Parse解析读取到的命令行参数 func InitViperCLI() {// 1. 读取命令行参数s : pflag.String(config, , 配置文件路径)// 2. 解析参数pflag.Parse()// 3. 设定配置文件路径viper.SetConfigFile(*s)// 4. 读取配置err : viper.ReadInConfig()if err ! nil {panic(err)} }step3然后我们就可以尝试在项目中正常读取 func main() {//InitViperLocal()InitViperCLI()// 1. 读取字符串数据addr : viper.GetString(redis.addr)fmt.Println(addr) }程序运行结果 3.3 viper 读取配置中心 3.3.1 安装 etcd step1使用 Docker 安装 etcddocker-compose.yaml 文件内容如下 version: 3 services:# 配置etcdetcd:image: bitnami/etcd:latestrestart: alwaysentrypoint:- ALLOW_NON_AUTHENTICATIONyesports:- 12379:2379然后在同级目录运行docker compose up启动 step2安装 etcdctl 工具下载源码包git clone [https://github.com/etcd-io/etcd.git](https://github.com/etcd-io/etcd.git)切换到正式版本tag中进入etcdctl目录执行go install .命令 然后就会在GOPATH/bin目录下生成对应工具运行etcdctl命令进行验证 3.3.2 使用 viper 接入 etcd step1使用 etcdctl 工具存储配置文件etcdctl --endpoints127.0.0.1:2379 put /viper_demo $(dev.yaml) step2在项目中通过以下 API 读取远程配置 AddRemoteProvider设置远程配置中心名称、地址、路径ReadRemoteConfig读取远程配置 func InitViperRemote() {// 1. 连接远程配置中心err : viper.AddRemoteProvider(etcd3, 127.0.0.1:2379, /viper_demo)if err ! nil {panic(err)}// 2. 读取配置err viper.ReadRemoteConfig()if err ! nil {panic(err)} }step3在项目中匿名导入下面这个包_ “github.com/spf13/viper/remote” step4在主函数中读取配置验证结果 func main() {//InitViperLocal()//InitViperCLI()InitViperRemote()// 1. 读取字符串数据addr : viper.GetString(redis.addr)fmt.Println(addr) }程序运行结果如下 3.4 viper 监听配置变更 viper 提供了下列 API 用于监听配置文件的变更并执行对应的回调函数 WatchConfig执行监听本地配置文件的变更WatchRemoteConfig执行监听远程配置中心的变更OnConfigChange当配置文件某个 Key 变更时执行对应的回调函数 func InitViperLocal() {// 1. 设置配置文件路径viper.AddConfigPath(config)// 2. 设置配置文件名称viper.SetConfigName(dev)// 3.设置配置文件类型viper.SetConfigType(yaml)// 4. 进行读取err : viper.ReadInConfig()if err ! nil {panic(err)}// 5. 开启监听viper.WatchConfig()// 6. 设置变更回调viper.OnConfigChange(func(e fsnotify.Event) {fmt.Println(config file changed:, e.Name)fmt.Println(viper.GetString(db.mysql.dsn))fmt.Println(viper.GetString(redis.addr))}) }func main() {InitViperLocal()server : gin.Default()server.Run(:8080) }程序运行结果
http://www.w-s-a.com/news/158923/

相关文章:

  • 网站定制项目上海快速建站
  • 大型视频网站建设方案东莞企业网站建设开发
  • 西安php网站制作可以用AI做网站上的图吗
  • 网站开发工程师和前端企业网络推广公司
  • 泉州开发网站的公司有哪些电脑网页翻译
  • 河北省建设机械会网站首页刚做的网站怎么收录
  • 什么网站专门做自由行的framework7做网站
  • 网页设计与网站建设书籍包头住房与城乡建设局网站
  • 重庆网站建设平台免费猎头公司收费收费标准和方式
  • 形象设计公司网站建设方案书打开一个不良网站提示创建成功
  • 网站手机页面如何做网站关键字 优帮云
  • 免费的黄冈网站有哪些下载软件系统软件主要包括网页制作软件
  • 企业微站系统重庆高端网站建设价格
  • 有没有做衣服的网站吗网站自适应开发
  • 青海省制作网站专业专业定制网吧桌椅
  • 网站开发的项目17岁高清免费观看完整版
  • 手机网站建设多少钱一个门网站源码
  • 重庆 网站开发天津住房和城乡建设厅官方网站
  • 泰安高级网站建设推广厦门高端网站建设定制
  • jsp网站开发引用文献手机seo排名
  • 创建一家网站如何创设计网页的快捷网站
  • 1688代加工官方网站h5开发教程
  • 静态网站源码下载网站怎么显示备案号
  • 网站代码设计网站开发维护任职要求
  • 长寿做网站的电话怎么快速刷排名
  • 上海市中学生典型事例网站邯郸全网推广
  • 厦门网站建设680元好男人的最好的影院
  • 石家庄网站建设设计产品设计专业就业前景
  • 网站移动排名做最好最全的命理网站
  • 网站怎么防黑客杭州市做外贸网站的公司