项目需要在 Web 前端配置 JSON 格式的采集器配置,实际采集器的配置文件为 TOML (.toml)格式,因此需要将 JSON 格式配置转换成 TOML 格式并写入配置文件中。示例代码如下所示:
package main
import (
"encoding/json"
"log"
"os"
"github.com/BurntSushi/toml"
)
func main() {
err := TestTOMLFunc()
if err != nil {
log.Println("Test toml function failed:", err.Error())
}
}
type TestTOML struct {
IP string `toml:"ip" json:"ip"`
Port uint16 `toml:"port" json:"port"`
Username string `toml:"username" json:"username"`
Password string `toml:"password" json:"password"`
Filters []string `toml:"filters,omitempty" json:"filters,omitempty"`
}
func TestTOMLFunc() error {
jsonStr := `{"ip":"127.0.0.1","port":6379,"username":"root","password":"123456","filters":["filter1","filter2"]}`
var v TestTOML
err := json.Unmarshal([]byte(jsonStr), &v)
if err != nil {
log.Println("json unmarshal failed:", err.Error())
return err
}
filepath := "test.toml"
return TOMLEncodeIntoFile(filepath, v)
}
// TOMLEncodeIntoFile 将 v 对象编码成 TOML 格式配置并写入 filepath 文件
func TOMLEncodeIntoFile(filepath string, v interface{}) error {
file, err := os.Create(filepath)
if err != nil {
log.Println(err.Error())
return err
}
defer file.Close()
err = toml.NewEncoder(file).Encode(v)
if err != nil {
log.Printf("toml encode[%#v] failed: %v", v, err)
return err
}
return nil
}