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.順便展示下上面所說的運維后台客戶端