Go語言生成json格式字符串


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM