go打包配置文件
序言
一开始用的go-bindata,但是到了Linux下发现,怎么用配置都不生效,然后看到了embed方法
使用
package config
import (
"bytes"
_ "embed"
"log"
"github.com/spf13/viper"
)
var Config struct {
// 这里定义你的配置字段,例如:
Port int
Env string
}
//go:embed config.yaml
var configData []byte
func init() {
// 从 embed 的变量中读取配置
viper.SetConfigType("yaml") // 明确指定配置类型
if err := viper.ReadConfig(bytes.NewBuffer(configData)); err != nil {
log.Fatalf("Error reading config file: %v", err)
}
if err := viper.Unmarshal(&Config); err != nil {
log.Fatalf("Unable to decode into struct: %v", err)
}
}
your_project/
├── config/
│ ├── config.yaml
│ └── config.go <-- 放置上面这个代码
└── main.go
这个是configs文件夹下的config.go
这个下面有config.yaml
需要注意的是
var configData []byte 上面的注释不是普通注释,他是告诉打包编译那个yaml文件