使用golang读取json配置文件,配置文件支持配置多台服务器,每个服务器中包含服务器的ID、访问地址、用户名、密码、启动的服务,启动的服务可以存在多个,每个服务有自己的启动参数,每个服务必须包含启动的ID以及其他的参数,提供读取配置到结构体和写入结构体到i配置文件的代码以及参考配置文件请继续这条回答
时间: 2023-02-05 19:38:24 浏览: 86
在 Go 语言中,可以使用 `encoding/json` 包来解析和生成 JSON 数据。下面是一个示例代码,展示了如何读取 JSON 配置文件并将其解析到结构体中,以及如何将结构体写入到 JSON 配置文件中:
```go
package main
import (
"encoding/json"
"fmt"
"os"
)
type Server struct {
ID int `json:"id"`
Address string `json:"address"`
Username string `json:"username"`
Password string `json:"password"`
Services []*Service `json:"services"`
}
type Service struct {
ID int `json:"id"`
StartParams []string `json:"start_params"`
}
func main() {
// 读取 JSON 配置文件
file, err := os.Open("config.json")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// 将 JSON 配置文件解析到结构体中
var servers []*Server
decoder := json.NewDecoder(file)
if err := decoder.Decode(&servers); err != nil {
fmt.Println("Error decoding JSON:", err)
return
}
// 打印解析后的结构体
fmt.Printf("%+v\n", servers)
// 将结构体写入到新的 JSON 配置文件中
newFile, err := os.Create("new_config.json")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer newFile.Close()
encoder := json.NewEncoder(newFile)
if err := encoder.Encode(servers); err != nil {
fmt.Println("Error encoding JSON:", err)
return
}
}
```
参考配置文件如下:
```json
[
{
"id": 1,
"address": "127.0.0.1",
"username": "user1",
"password": "pass1",
"services": [
{
"id": 1,
"start_params": ["param1", "param2"]
阅读全文