Go后端配置文件教程

注:本文为博主,首次接触项目时的入门级配置实操

在 Go 后端中,使用配置文件管理参数(如数据库连接、服务端口等)是必备技能。Viper 是 Go 生态中最流行的配置管理库。支持多种配置文件、环境变量、命令行参数等,并具备热更新能力。

(热更新:无需重新启动应用,适用于小范围、高频更新)

第一目:首先安装viper

go get github.com/spf13/viper

第二目:基础使用步骤(附代码)

1、创建配置文件
# config.yaml
server:host: "localhost"port: 8081
database:user: "admin"password: "secret"max_connections: 100
2、初始化 Viper 并读取配置
package configimport ("github.com/fsnotify/fsnotify""github.com/spf13/viper"
)func Init() error {viper.SetConfigName("config") // 配置文件名(不含扩展名)viper.SetConfigType("yaml")   // 文件类型viper.AddConfigPath("config") // 搜索路径(当前目录)// 读取配置if err := viper.ReadInConfig(); err != nil {return err}// 监听配置变更viper.WatchConfig()viper.OnConfigChange(func(e fsnotify.Event) {println("配置已更新!新端口:", viper.GetInt("server.port"))})return nil
}
3、在代码中获取配置
package mainimport ("fmt""github.com/renhongcai/gomodule/config""github.com/spf13/viper"
)func main() {if err := config.Init(); err != nil {panic("配置初始化失败:" + err.Error())}host := viper.GetString("server.host") // 读取配置port := viper.GetInt("server.port")    // 设置端口号fmt.Printf("服务启动于:%s:%d\n", host, port)}
4、viper支持的热更新

滞塞一下程序,然后手动更改端口:

package mainimport ("fmt""github.com/renhongcai/gomodule/config""github.com/spf13/viper"
)func main() {if err := config.Init(); err != nil {panic("配置初始化失败:" + err.Error())}host := viper.GetString("server.host") // 读取配置port := viper.GetInt("server.port")    // 设置端口号for true {// 手动阻塞}fmt.Printf("服务启动于:%s:%d\n", host, port)}

更改端口号config.yaml中的 port 8081 -> 8082

打印效果:
配置已更新!新端口: 8082

第三目:进阶的一些操作

1、设置默认值
// 默认
viper.SetDefault("server.port", 3000) // 默认端口,防崩溃
2、绑定环境变量
// 自动调用
viper.AutomaticEnv()                     // 自动读取环境变量
viper.BindEnv("server.port", "APP_PORT") // 绑定 APP_PORT 到 server.port
3、映射到结构体(更推荐)

这样更安全,更省心

type ServerConfig struct {Host string `mapstructure:"host"`Port int    `mapstructure:"port"`
}

main中 

func Init(){var serverCfg ServerConfigviper.UnmarshalKey("server", &serverCfg) // 将 server 节点映射到结构体
}
4、多文件支持
viper.SetConfigFile("db.yaml")
viper.MergeInConfig() // 合并到已有配置

第四目:本篇博客的结构

.
├── config
│   ├── config.go   # Viper 初始化代码
│   └── config.yaml # 主配置文件
├── main.go         # 程序入口
└── go.mod

第五目:经验总结

路径!!路径!!路径!!非常容易配置错

若是大型项目的话,可以将配置文件按照功能,拆分成多个yaml(redis.yaml、http.yaml)

最终通过咱们上方的那个多文件支持,根据需求进行合并操作....

注:注意其优先级顺序:命令好参数 > 环境变量 > 配置文件 > 默认值)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915684.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu24.04安装CUDA、VLLM、Pytorch等并部署Qwen3-8B-AWQ【50系显卡通用】

1. 系统更新与依赖安装 sudo apt update && sudo apt upgrade -y sudo apt install -y python3-pip python3-venv build-essential git nvidia-driver-575注:RTX 5070 Ti 推荐驱动 ≥550 版本 我是直接官网安装最新的驱动了,反正向上兼容,驱动安装教程可以参考我以…

Azure可靠性架构指南:构建云时代的高可用系统

随着企业加速拥抱数字化转型,云服务的可靠性已成为业务连续性的核心命题。Microsoft Azure凭借其"可靠性即核心"的设计理念,为企业技术决策者与架构师提供了一个可信赖的数字化底座。本文将系统解析Azure如何通过技术架构、工具链与方法论&…

linux 驱动 - v4l2 驱动框架

文章目录一、/dev/videoX1. 查询设备能力2. 获取当前视频格式3. 设置视频格式4. 申请缓冲区1) mmap 方式2) user 分配5. 查询缓冲区信息6. 将缓冲区放入队1) fill_vb2_buffer2) buf_prepare3) get_userptr4) buf_init5) attach_dmabuf 和 map_dmabuf6) start_streaming7) 总结7…

windows内核研究(驱动开发-0环与3环的通信)

驱动开发0环与3环的通信 设备对象 在之前开发窗口程序时,消息都是被封装成一个结构体(MSG),在内核开发时,消息被封装成另外一个结构体:IRP(I/O Request Package) 在窗口程序中&#…

ASP.NET Core Web API 内存缓存(IMemoryCache)入门指南

在 Web API 开发中,频繁访问数据库或第三方服务可能会带来性能瓶颈。为了提升接口响应速度并减轻后端压力,使用缓存是非常有效的优化手段。本文将带你快速上手 ASP.NET Core 提供的内存缓存(IMemoryCache),无需安装额外…

Axios Token 设置示例

以下是一个完整的 Axios Token 设置示例,涵盖全局配置、请求拦截器和单次请求设置三种方式:1. 基础配置(推荐方案)javascript复制代码import axios from axios;// 创建 Axios 实例 const apiClient axios.create({baseURL: https…

Excel数据合并工具:零门槛快速整理

软件介绍 在数据处理工作中,合并Excel同类数据是一项常见但繁琐的任务。今天为大家推荐一款专为简化此类操作设计的工具,它能快速完成工作表内多行同类数据的合并整理,大幅提升数据处理效率。 零门槛操作体验 相比Excel自带的数据透视…

深度学习 -- 梯度计算及上下文控制

深度学习 – 梯度计算及上下文控制 文章目录深度学习 -- 梯度计算及上下文控制一,自动微分1.1 基础概念1.2 计算梯度1.2.1 计算标量梯度1.2.2 计算向量梯度1.2.3 多标量梯度计算1.2.4 多向量梯度计算二,梯度上下文控制2.1 控制梯度计算2.2 累计梯度2.3 梯…

Redisson RLocalCachedMap 核心参数详解

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)

你是否曾梦想在虚拟世界中自由翱翔,像海豚一样在海洋自由穿梭,或者像宇航员一样在宇宙中尽情探索?今天,我们就来聊聊如何在Unity中使用Rigidbody来实现角色移动。 废话不多说,走,让我们马上来一探究竟&…

Vue接口平台学习十一——业务流测试

效果图及简单说明 与之前的用例列表相似布局,也分左右,左边用于显示测试流程的名称,右边用于显示流程相关信息。 左侧点击添加,直接增加一个新的业务流。 右侧是点击的业务流详情,展示名称,名称的编辑保存&…

碳化硅缺陷分类与原因

01一、碳化硅晶体材料中的缺陷到底是什么?碳化硅晶体材料中的缺陷是指在晶体生长、加工或使用过程中出现的不完美结构。这些缺陷可能表现为晶体内部的裂纹、表面的凹坑、原子排列的错误等。虽然缺陷看起来微不足道,但它们却可能对晶体的电学、热学和机械…

Jenkins 实现项目的构建和发布

作者:小凯 沉淀、分享、成长,让自己和他人都能有所收获! 本文的宗旨在于通过简单干净实践的方式教会读者,如何在 Docker 中部署 Jenkins,并通过 Jenkins 完成对项目的打包构建并在 Docker 容器中部署。 Jenkins 的主要…

Django接口自动化平台实现(三)

3.2 后台 admin 添加数据 1)注册模型类到 admin: 1 from django.contrib import admin2 from . import models3 4 5 class ProjectAdmin(admin.ModelAdmin):6 list_display ("id", "name", "proj_owner", "tes…

CentOS 7 配置环境变量常见的4种方式

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

k8s:手动创建PV,解决postgis数据库本地永久存储

1.离线环境CPU:Hygon C86 7285 32-core Processor 操作系统:麒麟操作系统 containerd:1.7.27 Kubernetes:1.26.12 KubeSphere:4.1.2 kubekey:3.1.10 Harbor:2.13.1 Postgis:17-3.52创建StorageClass2.1创建 apiVersion: storage.k8s.io/v1kin…

谷歌浏览器Chrome的多用户配置文件功能

谷歌浏览器Chrome的多用户配置文件功能允许在同一设备上创建多个独立账户,每个账户拥有完全隔离的浏览数据(如书签、历史记录、扩展、Cookies等),非常适合工作/生活账户分离、家庭共享或临时多账号登录场景。 如何使用Chrome的多用户配置文件功能? 一、创建与切换用户 1.…

傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!

小编今天分享一款强大的电脑屏幕录像软件 傲软录屏 ApowerREC,能够帮助用户录制中电脑桌面屏幕上的所有内容,包括画面和声音,支持全屏录制、区域录制、画中画以及摄像头录制等多种视频录制模式,此外,还支持计划任务录制…

【计算机网络】MAC地址与IP地址:网络通信的双重身份标识

在计算机网络领域,MAC地址与IP地址是两个核心概念,它们共同构成了数据传输的基础。理解二者的区别与联系,对于网络配置、故障排查及安全管理至关重要。 一、基本概念 1. MAC地址(物理地址) 定义:固化在网络…

如何用keepAlive实现标签页缓存

什么是KeepAlive首先,要明确所说的是TCP的 KeepAlive 还是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混为一谈。实际上HTTP的KeepAlive写法是Keep-Alive,跟TCP的KeepAlive写法上也有不同。TCP的KeepAliveTCP…