本文由 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变现方案!