AI接口实现:简单实现Viper配置管理

简介

前面实现的一个简易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 autoload type Config struct { *Suno `mapstructure:"suno"` } type Suno struct { Cookie string `mapstructure:"cookie"` }

全局变量

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

初始化Viper

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

package viper import ( "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 main import ( "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.cn获取更多AI变现方案!

posted @ 2024-06-04 16:21  代码十二少爷  阅读(1)  评论(0编辑  收藏  举报