GOLANG进阶:Viper,Mysql,Swagger,Log

golang工程组件之配置解决方案viper 一、viper概述 viper是一款独立于配置文件格式的库,可以使用多种格式的配置文件如json、yaml、toml等,并且支持从环境变量、命令行参数和默认值等多个来源读取配置。在Golang开发中,配置文件是必不可少的一部分,它可以让我们更好地管理应用程序的行为和设置,从而使得应用程序具有更高的灵活性。四、总结 viper是一款非常实用的Golang库,它提供了多种格式的配置文件支持,可以从多个来源读取配置,在提供默认值和灵活的配置覆盖策略等方面也做得非常好。(免费订阅,永久学习) 阅读详情

GOLANG从浅入深必须学习的一些工具包

1.Viper:

        Viper 是一个完整的 Go 应用程序配置解决方案,优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下:

        支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件
        可以设置监听配置文件的修改,修改时自动加载新的配置
        从环境变量、命令行选项和io.Reader,远程K/V中读取配置
        从远程配置系统中读取和监听修改,如 etcd/Consul
        代码逻辑中显示设置键值

        简单通俗的来说就是配置文件,比如数据库的连接参数(用户名,密码,端口号,数据名等等),这些都可以用viper包来实现存储

        为什么使用viper包来存储固定参数:为的是方便管理,如果项目要移植或者修改参数,直接修改配置文件就可以了,保证代码的健壮

  2. Mysql

        操作数数据库包,基础用法可以参考博主的另外一篇我文章,此处就不再赘述了     

引入包:

go get -u github.com/spf13/viper

怎么使用?实际上存储的数据是存储在一个yml格式的文件中(以数据库连接参数为例子)

1.创建一个文件夹:config

2.创建一个yml文件并写入数据:两种写法,可以自由选择(注意点:yml文件数据冒号后面一定要有空格,要不然没有效果)

//全量配置(不用写入yml文件)

mysql:
  dsn: root:root@tcp(127.0.0.1:3306)/gochect?charset=utf8&parseTime=True&loc=Local

//非全量配置(不用写入yml文件)
    
mysql:
    username: root
    password: root
    address: 127.0.0.1
    port: 3306
    dataname: gochect

3.引入包文件,开始读取包文件配置的数据:

SetConfigName   : 设置yml文件配置名
AddConfigPath      : 设置配置文件所在文件夹的名字
ReadInConfig    : 获取文件是否存在(用于判断是否设置错误)
viper.Get       : 获取单层文件(第一层)
viper.GetString : 获取多层文件(第二层乃至下级更多的层级)

实例代码:

package utils

import (
    "fmt"
    "github.com/spf13/viper"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

//定义变量

var DB *gorm.DB

func InitConfig ()  {
    viper.SetConfigName("app")
    viper.AddConfigPath("config")
    err :=viper.ReadInConfig()
    if err != nil{
        fmt.Println("参数读取错误")
    }
    fmt.Println("数据库配置参数",viper.Get("mysql"))
    fmt.Println("数据库配置参数1",viper.GetString("mysql.dsn"))
}

//此处特殊提醒一下:DB现在是提前定义的变量,该处切不使用 := 去初始化数据,这样就会一直实例化,导致会创建一个新的sqlDb变量,新的sqlDb会把全局变量sqlDb覆盖掉,最终会报错的

func IniMysql()  {
    DB, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dsn")))
}

3.Swagger

        相关的工具集会根据 OpenAPI 规范去生成各式各类的与接口相关联的内容,常见的流程是编写注解 =》调用生成库-》生成标准描述文件 =》生成/导入到对应的 Swagger 工具。

        简单来说就是前后端调试的时候的API文档,该文档可以由Swag通过配置项直接生成

1.引包

GOLANG版本1.17以下:go get -u github.com/swaggo/swag/cmd/swag

GOLANG版本1.17以上:go install github.com/swaggo/swag/cmd/swag@latest

2.初始化

运行命令:swag init

结果(生成docs文件夹):

查看是否安装成功命令:swag -v

3.引入相关包

go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

4.配置:

注意点:生成的docs包一定要引入(gochect是项目名称,在mod initi 初始化项目的时候设置的)

package route

import (
    "github.com/gin-gonic/gin"
    swaggerfiles "github.com/swaggo/files"
    ginSwagger "github.com/swaggo/gin-swagger"
    "gochect/docs"
    "gochect/service"
)

func Route() *gin.Engine{
    r := gin.Default()
    //设置路径
    docs.SwaggerInfo.BasePath =""
    r.GET("/index",service.GetIndex)
    //引入swag
    r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))

    return r
}

5.运行golang文件,查看是否成功

6.覆盖写入

入口文件配置示例:

//    @title            测试用例
//    @version        1.0
//    @description    测试用例

方法文件配置:

//    @Summary    首页
//    @Tags        首页
//    @Success    200    {string} Helloworld
//    @Router        /index [get]

        到此为止Swag就已经成功了,那么应该有读者会问了,Swag的配置属性有哪些?下面就给介绍一下

通用API信息

注释说明示例
title必填 应用程序的名称。// @title Swagger Example API
version必填 提供应用程序API的版本。// @version 1.0
description应用程序的简短描述。// @description This is a sample server celler server.
tag.name标签的名称。// @tag.name This is the name of the tag
tag.description标签的描述。// @tag.description Cool Description
tag.docs.url标签的外部文档的URL。// @tag.docs.url 
tag.docs.description标签的外部文档说明。// @tag.docs.description Best example documentation
termsOfServiceAPI的服务条款。// @termsOfService 
contact.name公开的API的联系信息。// @contact.name API Support
contact.url联系信息的URL。 必须采用网址格式。// @contact.url 
contact.email联系人/组织的电子邮件地址。 必须采用电子邮件地址的格式。// @contact.email 
license.name必填 用于API的许可证名称。// @license.name Apache 2.0
license.url用于API的许可证的URL。 必须采用网址格式。// @license.url 
host运行API的主机(主机名或IP地址)。// @host localhost:8080
BasePath运行API的基本路径。// @BasePath /api/v1
acceptAPI 可以使用的 MIME 类型列表。 请注意,Accept 仅影响具有请求正文的操作,例如 POST、PUT 和 PATCH。 值必须如“”中所述。// @accept json
produceAPI可以生成的MIME类型的列表。值必须如“Mime类型”中所述。// @produce json
query.collection.format请求URI query里数组参数的默认格式:csv,multi,pipes,tsv,ssv。 如果未设置,则默认为csv。// @query.collection.format multi
schemes用空格分隔的请求的传输协议。// @schemes http https
externalDocs.descriptionDescription of the external document.// @externalDocs.description OpenAPI
externalDocs.urlURL of the external document.// @externalDocs.url 
x-name扩展的键必须以x-开头,并且只能使用json值// @x-example-key {"key": "value"}

使用Markdown描述

如果文档中的短字符串不足以完整表达,或者需要展示图片,代码示例等类似的内容,则可能需要使用Markdown描述。要使用Markdown描述,请使用一下注释。

注释说明示例
title必填 应用程序的名称。// @title Swagger Example API
version必填 提供应用程序API的版本。// @version 1.0
description.markdown应用程序的简短描述。 从api.md文件中解析。 这是@description的替代用法。// @description.markdown No value needed, this parses the description from api.md
tag.name标签的名称。// @tag.name This is the name of the tag
tag.description.markdown标签说明,这是tag.description的替代用法。 该描述将从名为tagname.md的文件中读取。// @tag.description.markdown

API操作

注释描述
description操作行为的详细说明。
description.markdown应用程序的简短描述。该描述将从名为endpointname.md的文件中读取。
id用于标识操作的唯一字符串。在所有API操作中必须唯一。
tags每个API操作的标签列表,以逗号分隔。
summary该操作的简短摘要。
acceptAPI 可以使用的 MIME 类型列表。 请注意,Accept 仅影响具有请求正文的操作,例如 POST、PUT 和 PATCH。 值必须如“Mime类型”中所述。
produceAPI可以生成的MIME类型的列表。值必须如“Mime类型”中所述。
param用空格分隔的参数。param name,param type,data type,is mandatory?,comment attribute(optional)
security每个API操作的安全性。
success以空格分隔的成功响应。return code,{param type},data type,comment
failure以空格分隔的故障响应。return code,{param type},data type,comment
response与success、failure作用相同
header以空格分隔的头字段。 return code,{param type},data type,comment
router以空格分隔的路径定义。 path,[httpMethod]
x-name扩展字段必须以x-开头,并且只能使用json值。

Mime类型

AliasMIME Type
jsonapplication/json
xmltext/xml
plaintext/plain
htmltext/html
mpfdmultipart/form-data
x-www-form-urlencodedapplication/x-www-form-urlencoded
json-apiapplication/vnd.api+json
json-streamapplication/x-json-stream
octet-streamapplication/octet-stream
pngimage/png
jpegimage/jpeg
gifimage/gif

3.Log日志

引入包文件:go get gorm.io/gorm/logger

直接上代码:

func IniMysql()  {
    newLogger := logger.New(
        //自定义日志模板,打印sql语句
        log.New(os.Stdout,"/r/n",log.LstdFlags),
        logger.Config{
            SlowThreshold: time.Second,//慢sql阈值
            LogLevel: logger.Info,//log日志的级别
            Colorful: true,//颜色
        },
    )
    DB, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dsn")),&gorm.Config{Logger:newLogger})
}

​​​​​​​

 

Golang REST API开发实战:从环境搭建到部署的全流程指南 REST API是现代Web开发的核心技术架构,基于HTTP协议实现资源的增删改查操作。其工作原理是通过标准HTTP方法(GET、POST、PUT、DELETE)对资源进行统一接口访问,具有无状态、可缓存等特性。在技术价值方面,REST API支持前后端分离开发,便于微服务架构实施,特别适合构建高性能的后端服务。应用场景广泛覆盖Web应用、移动端后台、微服务通信等领域。本文以Golang为核心开发语言,结合Gin框架和GORM等热门技术栈,详细讲解如何构建完整的REST API服务。教程重点涵盖Gorout 阅读详情

相关推荐

Golang项目工程化实践:从目录结构到配置管理的系统设计

在软件工程领域,构建可维护、可扩展的系统是每个开发者从脚本思维迈向工程思维的关键跃迁。其核心原理在于通过清晰的项目结构设计、规范的版本控制和健壮的配置管理,实现代码的高内聚、低耦合。这种工程化实践的技术价值在于大幅提升团队协作效率、保障系统长期稳定运行,并降低技术债务。尤其在微服务、云原生和AI工程化等现代应用场景中,规范的工程基础是支撑复杂业务快速迭代的前提。本文以Golang项目为例,深入探讨如何设计合理的目录结构(如cmd、internal、pkg的分层),结合Git最佳实践和Viper配置库,构建一

weixin_34302561的博客 324

Golang进阶

因此,在程序执行的过程中,总会存在执行状态的切换(用户到内核,内核到用户)。但是,golang中的协程完完全全解决了这个问题。大多数编程语言,在如何实现并发的问题上,采用的都是基于线程和内存同步访问控制。我们在linux处着重讲了,实现进程间的本质,就是让每个进程(线程)可看到同一份公共资源。此时,只需要在该函数前加上go,这两个执行流就不会处在所谓的"阻塞"状态,而是各管各的。并行的是追是针对多核CPU,它指的是多个核心同时执行多个任务的能力。并发的实质是针对单核CPU,它的交替调度不同任务的能力。

RNGWGzZs的博客 2153

GoFly框架解析:基于Gin+Vue3的极速全栈开发实践

在Web开发领域,框架是提升开发效率、统一技术栈的核心工具。其原理在于通过封装通用模块、约定项目结构,为开发者提供一套开箱即用的解决方案,从而减少重复劳动、降低技术选型成本。对于Go语言而言,虽然其本身以高性能和简洁著称,但构建一个完整的Web应用仍需集成路由、ORM、认证等多个组件,这正是GoFly这类全栈框架的技术价值所在。它基于Gin和Vue 3等成熟生态,将最佳实践模块化,实现了从数据库操作到前端渲染的快速开发闭环。在实际应用场景中,这类框架特别适合需要快速迭代的中后台管理系统、企业级应用原型和AP

weixin_34354173的博客 561

golang学习---常用组件之Viper

一:简要介绍Viper Viper主要是用于处理各种格式的配置文件,简化程序配置的读取问题。 Viper 支持:(后续会详细介绍) 设置默认值 从JSON,TOML,YAML,HCL和Java属性配置文件中读取 实时观看和重新读取配置文件(可选) 从环境变量中读取 从远程配置系统(etcd或Consul)读取,并观察变化 从命令行标志读取(flag) 从缓冲区读取 设置显式值 二:Viper安装 go get github.com/spf13/viper 三:设置默认值 一个..

weixin_38981051的博客 6960

[Golang] Viper原理以及详细使用案例

介绍:用于处理配置文件中解析和读取配置文件优点:支持多种配置格式,json,yaml 等等作用:配置文件解析和读取 默认值支持 环境变量支持 命令行标志支持 配置监听和热加载。

Jing_Hua 3525

SPAD 单光子雪崩二极管

SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。

qq_42786033的博客 1万+

golang入门笔记——viper

BindEnv使用一个或者两个参数:第一个参数是键名称,第二个参数是环境变量名。Viper是golang的一个管理配置文件的工具,它支持JSON、TOML、YAML、HCL、envfile、Java properties。SetEnvPrefix:用于不知道环境变量名时,viper自动查找的时候加的前缀名,BindEnv和AutomaticEnv都将使用这个前缀。需要重新启动服务器以使配置生效的日子已经一去不复返了,viper驱动的应用程序可以在运行时读取配置文件的更新,而不会错过任何消息。

qq_43716830的博客 2766

从牛顿冷却定律到热传导方程:一维热传导方程的物理直觉与数学推导

本文从牛顿冷却定律出发,结合傅里叶热传导定律和能量守恒原理,系统推导了一维热传导方程的数学形式。通过微元分析和物理直觉,揭示了温度随时间变化与空间二阶导数之间的关系,并阐释了热扩散率α的物理意义。文章还探讨了方程的边界条件、数值解法及其在材料科学和工程中的应用,为理解热量传递提供了清晰的物理图像和数学框架。

palm99的专栏 837

go--------gin+mysql+redis+websocket搭建聊天

这里需要注意的就是redis启动后期可能需要记录数据到redis,记录到redis有个好处可以设置国企时间自动清除,不用链接mysql数据库。2.untils目录下负责链接redis,mysql,kafak等操作,地址untils/system_init.go。避坑主要在于测试webscoket的地方可能会跨域需要加入如下代码解决跨域问题。1.在根目录下新建config/config.yml如下。二、链接MySQL和redis。3.安装redis依赖。1.在控制器层新建如下。

qq_17525509的博客 1433

Zotero内存占用与存储优化:从根源解决卡顿与空间不足

文献管理软件在学术工作中扮演着重要角色,其核心原理是通过数据库管理元数据与附件文件,实现文献的快速检索与组织。然而,随着文献库规模增长,软件的资源管理机制可能面临挑战,尤其是内存占用与存储空间优化问题。从技术价值看,高效的附件管理策略不仅能提升软件响应速度,还能确保数据安全与可移植性。在实际应用场景中,研究者常遇到软件卡顿、存储目录膨胀等痛点,这通常与附件存储模式、缓存机制及数据库维护有关。本文聚焦于Zotero这一主流工具,针对其内存占用高、文件无法删除等常见问题,提供了外置存储、链接附件、数据库维护等系

weixin_34209060的博客 454

嵌入式开发 DSP芯片运行方式(挖坑-填坑中-坑已平 :))

TMS320F28335 DSP 芯片 如何将运行代码放在不同的位置

FOOLCODE的专栏 1306

Go13-企业级项目实战

项目结构:清晰的分层架构配置管理:使用 Viper 管理配置数据库操作:使用 GORM 进行 ORM 操作错误处理:统一的错误响应格式认证授权:JWT 认证和中间件日志记录:结构化日志API 文档:Swagger 文档测试:单元测试和 Mock部署:Docker 容器化部署。

技术博客 102

从零开始:使用Mask2Former训练你的专属数据集

本文详细介绍了如何从零开始使用Mask2Former训练自定义数据集。内容涵盖环境搭建、数据准备(将LabelMe格式转换为COCO格式)、数据集注册与模型配置、训练启动与调试,以及最终的模型推理与应用。通过实战步骤和常见问题解决方案,帮助读者掌握使用Mask2Former进行实例分割的核心流程,实现专属模型的训练与部署。

weixin_28678151的博客 448

Golang专题精进

Golang专题精进 Golang单元测试 Golang错误处理 Golang正则表达式 Golang反射 Golang验证码 Golang日期时间处理库Carbon Golang发送邮件库email Golang log日志 Golang log日志框架logrus Golang加密和解密应用 Golang访问权限控制框架casbin Golang使用swagger生成api接口文档 Golang jwt跨域鉴权 Golang配置管理库viper Golang gin ngi

hixiaoyang的博客 512

06 - 深度学习处理器原理

深度学习处理器的重要性在于它们可以加速深度学习任务的执行,从而推动了人工智能的发展。传统的通用处理器虽然可以执行深度学习任务,但它们不够高效,需要消耗大量的能量和时间。深度学习处理器通过硬件加速和特定设计来优化深度学习任务的执行,从而可以提高执行效率、降低能耗和加速训练和推断过程。 深度学习处理器的发展也推动了深度学习算法的创新,因为算法的发展需要硬件的支持和驱动。同时,深度学习处理器的出现也促进了更广泛的应用场景,包括自动驾驶、人脸识别、语音识别、图像识别等领域。因此,深度学习处理器的重要性不仅在于加速

m0_51339444的博客 752

计算机组成原理(第三版)唐朔飞-第一章第二章-课后习题

计算机组成原理

weixin_45735391的博客 7万+

golang高级进阶(一):进程、线程、并发、并行、goroutine协程

目录 一、关于进程和线程 1. 进程(Process) 2. 线程 二、关于并发和并行 1. 并发 2. 并行 3. 通俗讲 三、goroutine协程以及主线程 1. 主线程 2. 协程 3. 多协程和多线程 四、go关键词实操 1. 顺序执行 2. 加入go 3. 加入时间 4. 主线程执行快的情况 5. sync.WaitGroup解决不等待 6. 多协程并发并行执行 五、设置golang运行时占用的cpu核数量(不是很重要) 重点:这一篇全是干货,一定要多

genziisme的专栏 6908

14、多级快速多极子算法(MLFMA)详解

多级快速多极子算法(MLFMA)是一种高效加速矩阵向量乘法(MVM)的数值方法,广泛应用于电磁场积分方程求解中。该算法通过构建多级树结构,将MVM分解为近场直接计算和远场分组计算两部分,利用递归聚类、聚合-平移-分解三阶段处理远场相互作用,并结合采样、模式计算与优化策略,将计算复杂度从O(N^2)降低至O(N log N)。博文详细阐述了MLFMA的核心步骤、数学推导、计算复杂度及实际应用中的优化技术,如伽辽金方案改进、对称性利用和反插值方法,为大规模电磁问题的高效求解提供了系统性指导。

t8u9v0w1x的博客 241

golang下的viper包的简单使用

对于初学者使用viper的一些启发

imthefaker的博客 1444

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

go 使用viper包读取toml和yml配置文件

什么是viper包? Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。有了viper包,不用再费尽心思去寻找不同格式的配置文件对应的操作库,轻松读取配置信息。目前viper包支持JSON、TOML、YAML、HCL、envfile和Java properties等格式。 viper非常的容易上手。 读取toml文件 test.toml [database] server = "192.168.1.1" ports = [ 8001, 80

秋叶原的黑猫的博客 3578

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Go项目配置管理工具---Viper

命令行参数环境变量配置文件显然,对于Go项目而言,单个去读取命令行、环境变量、配置文件并不难,但一个个读取却是很麻烦,有没有一个第三方库可以帮我们一次性读取上面几种数据源的配置呢?有的,就是使用 viper 库,viper支持读取不同数据源和不同格式的配置文件,是Go项目读取配置的神器。

氷的博客 3887

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

golang viper读取yaml配置文件配置

viper读取yaml配置文件配置

leo_jk的博客 2592

go语言基础进阶

go语言进阶前言一、import与init二、defer关键字三、匿名函数与闭包四、数组、切片详解五、map六、空接口的妙用七、GoModules项目管理 前言 一个好的学习者,一定要建立自己的节奏,看别人的教程,别人的视频,是别人的知识体系,不是自己的,最好的学习方式是:提出问题,自己主动寻找解答。 在提出问题之前,可能连如何提问都不知道,这时可以先看别人的视频,但看懂不是最重要的,速通一遍,知道视频的体系,哪个视频讲了什么知识点,很重要。这样才能在主动寻找解答的时候迅速定位答案。 一、import与in

海豹姥爷的博客 970

github.com/spf13/viper go viper包介绍

  什么是Viper? Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序。它旨在在应用程序中工作,并可以处理所有类型的配置需求和格式。它支持: 设置默认值 从JSON,TOML,YAML,HCL和Java属性配置文件中读取 实时观看和重新读取配置文件(可选) 从环境变量中读取 从远程配置系统(etcd或Consul)读取,并观察变化 从命令行标志读取 从...

好记性不如烂笔头 2万+

Golang 学习(二)进阶使用

P代表着处理器(processor),它的主要用途就是用来执行goroutine的,一个P代表执行一个go代码片段的基础(上下文环境),所以它也维护了一个可运行的goroutine队列,和自由的goroutine队列,里面存储了所有需要它来执行的goroutine。Seched代表着一个调度器,它维护有存储空闲的M队列和空闲的P队列,可运行的G队列,自由的G队列(全局runqueue)以及调度器的一些状态信息等。中,本地运行队列中的 goroutine 会一直等待直到自己被分配的逻辑处理器执行。

qq_42767993的博客 1603
上一篇: 百度编辑器(Ueditor)视频上传到阿里云 + 预览不支持FLASH问题解决 + 输入框不展示视频播放页面问题解决
下一篇: GOLANG进阶:govalidator过滤器,MD5,JWT身份验证,redis
masterphp
博客等级 码龄5年 247粉丝 75原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值