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.顺便展示下上面所说的运维后台客户端

 

posted @ 2021-10-29 16:48  chenjianwen  阅读(2176)  评论(0编辑  收藏  举报