简单实现Viper配置管理

news/2025/3/15 11:21:38/文章来源:https://www.cnblogs.com/ChatMoney/p/18234897

本文由 ChatMoney团队出品

简介

前面实现的一个简易suno-api。是使用cookie来获取suno-token发起请求的。当时并没有通过配置的方式来获取cookie,而是直接在代码中写死了cookie的值,这种做法并不好,所以现在打算把cookie值改造为一个配置,通过viper来读取。

什么是viper

Viper是一个用于Go语言的应用程序配置库,它支持多种格式的配置文件,如JSON、YAML、TOML等,并且可以轻松地从环境变量、命令行参数、远程配置源等读取配置。Viper由Spf13开发,是Cobra和Hugo等项目的一部分。

安装

要开始使用Viper,首先需要安装它。可以使用Go的包管理工具go get来安装:

go get github.com/spf13/viper

基本使用

配置定义

suno:cookie: "12321312312321"

配置结构体

package autoloadtype Config struct {*Suno `mapstructure:"suno"`
}type Suno struct {Cookie string `mapstructure:"cookie"`
}

全局变量

package internalimport "go-suno/config/autoload"var (// BasePath 项目根目录BasePath string// Conf 全局配置Conf *autoload.Config
)

初始化Viper

定义viper初始化方法,读取配置文件并绑定到配置结构体

package viperimport ("fmt""github.com/fsnotify/fsnotify""github.com/spf13/viper""go-suno/internal""log""path""runtime"
)// Init 初始化viper
func Init() {_, filename, _, _ := runtime.Caller(0)internal.BasePath = path.Dir(path.Dir(path.Dir(filename)))viper.SetConfigFile(internal.BasePath + "/config/config.yaml") // 指定配置文件路径err := viper.ReadInConfig()                     // 读取配置信息if err != nil {                                 // 读取配置信息失败log.Fatal("viper.ReadInConfig() failed,err:" + err.Error())}// 把读取到的配置信息反序列化到Conf 变量中if err := viper.Unmarshal(&internal.Conf); err != nil {log.Fatal("viper.Unmarshal failed, err:" + err.Error())}// 监控配置文件变化viper.WatchConfig()viper.OnConfigChange(func(in fsnotify.Event) {fmt.Println("配置文件修改了")if err := viper.Unmarshal(&internal.Conf); err != nil {fmt.Printf("viper.Unmarshal failed, err:%v\n", err)}})
}

测试效果

main入口调用viper初始化方法,创建测试配置接口

package mainimport ("github.com/gin-gonic/gin""go-suno/internal""go-suno/pkg/viper""net/http"
)func main() {r := gin.Default()// 配置加载viper.Init()// 使用中间件internal.RateLimitMiddleware(r, 1, 100)// 创建一个路由组,可以为其添加中间件handler := new(internal.Handler)v1 := r.Group("/api"){v1.POST("/gen", handler.GenMusic)v1.GET("/feed", handler.GetFeed)// 测试v1.GET("/config", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"data":  internal.Conf.Suno.Cookie,})})}_ = r.Run()
}

设置配置文件

启动项目

go run main.go

访问测试接口

完整代码

https://gitee.com/mofung1/go-suno

关于我们

本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!

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

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

相关文章

全局 type 类型的寻找 typescript 类型 - fabric.Canvas

全局 type类型的寻找 typescript 类型 - fabric.Canvas declare type ExtCanvas = fabric.Canvas & {isDragging: boolean;lastPosX: number;lastPosY: number; };这个代码 没有定义 fabric.Canvas,然后看看提示说在namespace定义了。这个是子项目,没有type定义,上父项目…

Linux中sed命令b选项屏蔽指定的处理区域

001、Linux中sed命令b选项屏蔽指定的处理区域[root@pc1 test2]# ls a.txt [root@pc1 test2]# cat a.txt ## 测试数据 1 01 02 a 2 03 04 a 3 05 06 a 4 07 08 5 09 10 k 6 11 12 a 7 13 14 8 15 a i 9 17 18 a [root@pc1 test2]# sed 1,3b; s/a/Q/ a.tx…

SwiftUI 热门开源库推荐第1期 - 凡人程序猿 - iOS开发

大家好,我是凡人程序猿。周末给大家分享几个我在用已久的 GitHub 开源库,这些开源库使用简单,功能强大,使用好它们能够为我们节省大量的开发时间。大家好,周末给大家分享几个我在用已久的 GitHub 开源库,这些开源库使用简单,功能强大,使用好它们能够为我们节省大量的开…

初探堆栈欺骗之静态欺骗

本文首发先知社区:https://xz.aliyun.com/t/14487 首先介绍一下堆栈欺骗的场景,当我们用一个基本的 shellcode loader 加载 cs 的 shellcode,在没有对堆栈做任何事情时,我们的堆栈是不干净的,我们去看一下堆栈时会发现有很多没有被解析的地址在其中,这显然是不正常的,因…

LLM 扩展开发工具

参考知乎: 大模型Agent智能体25款产品、商业案例随笔记(一) 、 基于大模型的AI搜索15款产品随笔记(二) LLM 扩展开发工具: 1、开源且无需编码(No-Code)的 LLM 应用构建工具: https://flowiseai.com/ ,将永远免费供商业和个人使用。代码库: https://github.com/Flow…

Linux 提权-Cron Jobs

本文通过 Google 翻译 Cron Jobs – Linux Privilege Escalation - Juggernaut-Sec 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 什么是 Cron Job?1.1 了解 Crontabs 和 Cron 目录 1.2 如何在 Crontab 文件中读取 Cron 作…

Spring Boot heapdump泄露内存分析方法

一、查看加密星号信息(适用于数据库密码、ftp、ssh) 1.首先访问地址:http://url/actuator/env 出现一些配置信息,搜索带有******可以看到ftp的ip,username,password 2.接着访问http://url/actuator/heapdump 下载下来heapdump文件 使用java自带的工具进行分析 位置:C:\Pro…

计算机简史-概述

讲解计算机发展的历史,人类如何从手工计算,发明工具,最后演变成如今的计算机。讲解计算机发展的历史,人类如何从手工计算,发明工具,最后演变成如今的计算机。 ‍ 为什么要了解计算机发展历史 简单说说我的看法:了解计算机发展历史,对我们掌握计算机底层的原理是非常有帮…

使用 Hugging Face 推理终端搭建强大的“语音识别 + 说话人分割 + 投机解码”工作流

Whisper 是当前最先进的开源语音识别模型之一,毫无疑问,也是应用最广泛的模型。如果你想部署 Whisper 模型,Hugging Face 推理终端 能够让你开箱即用地轻松部署任何 Whisper 模型。但是,如果你还想叠加其它功能,如用于分辨不同说话人的说话人分割,或用于投机解码的辅助生…

2024年离职和后续发展

目录前言个人情况2023年底2024年初,找工作失败2024年2月,计划开公司家里关系开公司原因2024年4月,说明我要离职的想法5月,开始办理公司6月,开始准备资料,提离职 前言 最近我也快离职回家了,简单说一下最近发送的事情好了,这里按照时间的顺序 个人情况 2022年毕业,来到…

华为matebook 14s笔记本,Chrome浏览器开启硬件加速,屏幕闪屏,黑框,页面屏幕卡死,解决办法

解决办法使用了 https://zhuanlan.zhihu.com/p/644296061 这个连接下的最后一个折中办法解决! 一、现象 Chrome开启“硬件加速模式”后,在观看视频时,尤其是全屏时,会出现短暂黑屏或黑块或闪屏。如果关闭“硬件加速”,则会造成播放某些高清视频(例如HEVC)视频或弹幕卡顿(…

BD10100CS-ASEMI肖特基二极管BD10100CS

BD10100CS-ASEMI肖特基二极管BD10100CS编辑:ll BD10100CS-ASEMI肖特基二极管BD10100CS 型号:BD10100CS 品牌:ASEMI 封装:TO-252 最大平均正向电流(IF):10A 最大循环峰值反向电压(VRRM):100V 最大正向电压(VF):0.80V 工作温度:-65C~175C 芯片个数:2 芯片尺寸:mi…