AI介面實現:簡單實現Viper配置管理

代码十二少爷發表於2024-06-04

簡介

前面實現的一個簡易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變現方案!

相關文章