go web gin集成viper最佳实践

简介: Viper是Go应用程序的完整配置解决方案,包括12因素应用程序。它旨在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持:- 设置默认值- 从 JSON、TOML、YAML、HCL、envfile 和 Java 属性配置文件读取- 实时观看和重新读取配置文件(可选)- 从环境变量读取- 从远程配置系统(etcd或Consul)读取,并观察更改- 从命令行标志读取- 从缓冲区读取- 设置显式值Viper 可以被视为满足所有应用程序配置需求的注册表。

1.介绍

Viper是Go应用程序的完整配置解决方案,包括12因素应用程序。它旨在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持:

  • 设置默认值
  • 从 JSON、TOML、YAML、HCL、envfile 和 Java 属性配置文件读取
  • 实时观看和重新读取配置文件(可选)
  • 从环境变量读取
  • 从远程配置系统(etcd或Consul)读取,并观察更改
  • 从命令行标志读取
  • 从缓冲区读取
  • 设置显式值

Viper 可以被视为满足所有应用程序配置需求的注册表。

具体参考https://github.com/spf13/viper

实践

config\application.yaml

server:
  port: 8080
datasource:
  driverName: mysql
  host: 127.0.0.1
  port: 3306
  database: liuyunshengsir
  username: root
  password: 123456
  charset: utf8
  loc: Asia/Shanghai

获取

package main

import (
    "fmt"

    "liuyunshengsir/lys_meet/controller1"
    "liuyunshengsir/lys_meet/docs"
    "os"

    "github.com/gin-gonic/gin"
    "github.com/spf13/viper"
    swaggerFiles "github.com/swaggo/files"
    ginSwagger "github.com/swaggo/gin-swagger"
)

// @contact.name   API Support
// @contact.url    http://www.swagger.io/support
// @contact.email  support@swagger.io

// @license.name  Apache 2.0
// @license.url   http://www.apache.org/licenses/LICENSE-2.0.html
func main() {
    InitConfig()
    // programmatically set swagger info
    docs.SwaggerInfo.Title = "Swagger Example API-刘云生sir"
    docs.SwaggerInfo.Description = "This is a test server."
    docs.SwaggerInfo.Version = "1.0"
    docs.SwaggerInfo.Host = "127.0.0.1:8080/"
    //docs.SwaggerInfo.BasePath = "/v2"
    docs.SwaggerInfo.Schemes = []string{"http", "https"}

    r := gin.New()

    v1 := r.Group("/api/v1")
    {

        v1.GET("/GetConfig", GetConfig)

    }

    // use ginSwagger middleware to serve the API docs
    r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

    r.Run()
}

/**
初始化配置文件
*/
func InitConfig() {
    workDir, _ := os.Getwd()
    viper.SetConfigName("application")
    viper.SetConfigType("yaml")
    viper.AddConfigPath(workDir + "/config")
    err := viper.ReadInConfig()
    if err != nil {
        panic(fmt.Errorf("Fatal error config file: %s \n", err))
    }
}

// @sayHello
// @Description GetConfig
// @Router /api/v1/GetConfig [get]
func GetConfig(c *gin.Context) {
    driverName := viper.GetString("datasource.driverName")

    c.JSON(200, gin.H{
        "describe": "配置文件数据库返回的参数",
        "name":     driverName,
    })
}
相关文章
|
1月前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
59 1
|
2月前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
3月前
|
Kubernetes Go 持续交付
一个基于Go程序的持续集成/持续部署(CI/CD)
本教程通过一个简单的Go程序示例,展示了如何使用GitHub Actions实现从代码提交到Kubernetes部署的CI/CD流程。首先创建并版本控制Go项目,接着编写Dockerfile构建镜像,再配置CI/CD流程自动化构建、推送Docker镜像及部署应用。此流程基于GitHub仓库,适用于快速迭代开发。
66 3
|
3月前
|
Kubernetes 持续交付 Go
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
|
2月前
|
监控 安全 Apache
构建安全的URL重定向策略:确保从Web到App平滑过渡的最佳实践
【10月更文挑战第2天】URL重定向是Web开发中常见的操作,它允许服务器根据请求的URL将用户重定向到另一个URL。然而,如果重定向过程没有得到妥善处理,可能会导致安全漏洞,如开放重定向攻击。因此,确保重定向过程的安全性至关重要。
115 0
|
2月前
|
存储 缓存 安全
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
33 0
|
3月前
|
监控 安全 测试技术
提升软件测试效率:探索持续集成的最佳实践
在现代软件开发过程中,持续集成(CI)已成为提高软件质量和测试效率的关键实践。通过将代码库的每次提交自动构建和测试,CI 帮助团队及时发现问题,减少手动测试的负担。本文探讨了如何有效实施持续集成来优化软件测试流程,并提供了一些实用的策略和工具建议,以帮助开发团队更高效地运作。
78 2
|
3月前
|
Web App开发 编解码 前端开发
构建响应式Web应用的最佳实践
构建响应式Web应用的最佳实践
51 0
|
4月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
92 1
|
4月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
58 1