1.前言
刚开始学习go,学习了其中一些基础内容,头脑终于有了一些想法,使用go编写运维后台的客户端,主要是收集一些系统信息提交给运维后台做记录,并且起到一个监听目标机器存活的功能。因为运维后台服务端是使用python django写的,原定格式就是接收json字符串数据,便于转换成json格式数据,于是就有了go要生成json格式字符串的需求。由于是初学的go,发现go对json数据解析并不是太方便,感觉挺复杂的,记录下生成方法,便于日后查看重用。
2.直接上代码
package main import ( "encoding/json" "fmt" _ "github.com/codyguo/godaemon" //go进程后台运行模块,运行程序加上 -d 参数即可后台运行 "time" ) //成员变量名首字母必须大写 type ServerInfo struct { Token string `json:"token"` // 二次编码,可以把大写变成小写,严格类型要求 Ip string `json:"ip"` //Class *Class `json:"class"` Cpu *Cpu `json:"cpu"` Memory *Memory `json:"memory"` Disk *Disk `json:"disk"` } type Cpu struct { Cpu_percent string `json:"cpu_percent"` Cpu_number string `json:"cpu_number"` } type Memory struct { Memory_total string `json:"memory_total"` Memory_percent string `json:"memory_percent"` Memory_available string `json:"memory_available"` } type Disk struct { Disk_available_gen string `json:"disk_available_gen"` Disk_usage_gen_percent string `json:"disk_usage_gen_percent"` Disk_available_data string `json:"disk_available_data"` Disk_usage_data_percent string `json:"disk_usage_data_percent"` } func goGetSystemInfo() { ////////////////////////////////生成json字符串数据//////////////////////////////// //实例化一个数据结构,用于生成json字符串 stu := ServerInfo{ Token: "token_str", Ip: "ip", } //指针变量 cCpu := new(Cpu) cCpu.Cpu_percent = "cpu_percent" cCpu.Cpu_number = "cpu_number" stu.Cpu = cCpu //指针变量 mMemory := new(Memory) mMemory.Memory_total = "memory_total" mMemory.Memory_available = "memory_available" mMemory.Memory_percent = "memory_percent" stu.Memory = mMemory //指针变量 dDisk := new(Disk) dDisk.Disk_available_gen = "disk_available_gen" dDisk.Disk_usage_gen_percent = "disk_usage_gen_percent" dDisk.Disk_available_data = "disk_available_data" dDisk.Disk_usage_data_percent = "disk_usage_data_percent" stu.Disk = dDisk //Marshal失败时err!=nil jsonStu, err := json.Marshal(stu) if err != nil { fmt.Println(time.Now().Format("2006-01-02_15:04:05"),"生成json字符串错误") } else { fmt.Println(time.Now().Format("2006-01-02_15:04:05"),"生成数据json字符串成功") } //jsonStu是[]byte类型,转化成string类型便于查看 //fmt.Println(string(jsonStu)) ServerInfoData := string(jsonStu) fmt.Println(ServerInfoData) ////////////////////////////////生成json字符串数据//////////////////////////////// } func main() { goGetSystemInfo() }
3.执行结果
2021-10-29_16:45:39 生成数据json字符串成功 { "token":"token_str", "ip":"ip", "cpu":{ "cpu_percent":"cpu_percent", "cpu_number":"cpu_number" }, "memory":{ "memory_total":"memory_total", "memory_percent":"memory_percent", "memory_available":"memory_available" }, "disk":{ "disk_available_gen":"disk_available_gen", "disk_usage_gen_percent":"disk_usage_gen_percent", "disk_available_data":"disk_available_data", "disk_usage_data_percent":"disk_usage_data_percent" } }
4.顺便展示下上面所说的运维后台客户端