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

  • 相关阅读:
    性能测试系列(1)-性能测试基本概念
    性能篇综合汇总
    【CTFHUB】Web技能树
    Flash XSS
    绕过CDN找到⽬标站点真实IP
    【网鼎杯2020白虎组】Web WriteUp [picdown]
    【网鼎杯2020朱雀组】Web WriteUp
    【网鼎杯2020青龙组】Web WriteUp
    利用DNSLog实现无回显注入
    Cobalt Stike使用教程
  • 原文地址:https://www.cnblogs.com/chenjw-note/p/15481247.html
Copyright © 2020-2023  润新知