golang 格式化打印struct

//type:interface value:sturct
func PrintStruct(t reflect.Type, v reflect.Value, pc int) {
    fmt.Println("")
    for i := 0; i < t.NumField(); i++ {
        fmt.Print(strings.Repeat(" ", pc), t.Field(i).Name, ":")
        value := v.Field(i)
        PrintVar(value.Interface(), pc+2)
        fmt.Println("")
    }
}

func PrintArraySlice(v reflect.Value, pc int) {
    for j := 0; j < v.Len(); j++ {
        PrintVar(v.Index(j).Interface(), pc+2)
    }
}
func PrintMap(v reflect.Value, pc int) {
    for _, k := range v.MapKeys() {
        PrintVar(k.Interface(), pc)
        PrintVar(v.MapIndex(k).Interface(), pc)
    }
}

func PrintVar(i interface{}, ident int) {
    t := reflect.TypeOf(i)
    v := reflect.ValueOf(i)
    if v.Kind() == reflect.Ptr {

        v = reflect.ValueOf(i).Elem()
        t = v.Type()
    }
    switch v.Kind() {
    case reflect.Array:
        PrintArraySlice(v, ident)
    case reflect.Chan:
        fmt.Println("Chan")
    case reflect.Func:
        fmt.Println("Func")
    case reflect.Interface:
        fmt.Println("Interface")
    case reflect.Map:
        PrintMap(v, ident)
    case reflect.Slice:
        PrintArraySlice(v, ident)
    case reflect.Struct:
        PrintStruct(t, v, ident)
    case reflect.UnsafePointer:
        fmt.Println("UnsafePointer")
    default:
        fmt.Print(strings.Repeat(" ", ident), v.Interface())
    }
}
时间: 2024-10-21 16:25:19

golang 格式化打印struct的相关文章

golang json处理struct未导出成员

我们用golang的json来marshal一个结构体的时候,结构体的未导出的成员将无法被json访问,也就是不会出现json编码的结果里(也就是小写的成员没法导出) 这个是由于技术的上问题引起的:golang的结构体里的成员的名字如果以小写字母开头,那么其他的包是无法访问的,也就是json无法访问我们的结构体里小写字母开头的成员 这个可以有两种方法解决 1. struct的成员用大写开头,然后加tag 2. 实现json.Marshaler接口 第一种方法比较常见这儿就不详细展开了 第二种方法

mongodb之find格式化打印

未格式化打印 > db.games.find() { "_id" : ObjectId("53d077372826c5d3aae7ad6a"), "game" : "pinball", "user" : "joe", "score" : 5050 } 格式化打印 > db.games.find().pretty() { "_id" : 

Java获取当前时间年月日、时间格式化打印、字符串转日期

package com.sysc.simple; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtils { public static void show() throws ParseException { //获取当前日期 Calendar now = Calendar

【JAVA】格式化打印printf的使用

格式化打印printf的使用 import java.util.Date; /** * 使用printf输出 */ /**关键技术点 * 使用java.io.PrintStream的printf方法实现C风格的输出 * printf 方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象 */ public class Printf { public static void main(String[] args) { /*** 输出字符串 ***/ // %s表示输出字符串,也

golang格式化输出-fmt包用法详解

注意:我在这里给出golang查询关于包的使用的地址:https://godoc.org    声明: 此片文章并非原创,大多数内容都是来自:https://godoc.org/fmt,通过谷歌翻译进行翻译而来.   import "fmt" fmt包实现了类似C语言printf和scanf的格式化I/O.格式化verb('verb')源自C语言但更简单. Printing verb: 通用: 1 %v 值的默认格式表示.当输出结构体时,扩展标志(%+v)会添加字段名 2 %#v 值的

printf格式化打印

格式代码 A ABC ABCDEFGH %S A ABC ABCDEFGH %5S ####A ##ABC ABCDEFGH %.5S A ABC ABCDE %5.5S ####A ##ABC ABCDE %-5S A#### ABC## ABCDEFGH Printf 格式化字符串 格式代码 1 -12 12345 123456789 %d 1 -12 12345 123456789 %6d #####1 ###-12 #12345 123456789 %.4d 0001 -0012 123

格式化打印(一)

我们编写的许多脚本可以很好地实现对数据的操作,但没有对输出进行适当的格式化.这是因为基本的print语句所能做的工作有限.因为awk的大多数功能是产生报告,因此以整齐的样式产生格式化报告是很重要的.程序filesum可以很好地处理数据,但它的报告缺乏整齐的格式. awk提供的printf可以代替print语句,printf是借用了C程序设计语言.printf语句和print语句一样可以打印一个简单的字符串. awk ' BEGIN { printf ("Hello, world\n")

golang获取packed struct的大小

网络协议里面,很可能遇到自定义的封包,对应到c里面的是 typedef struct _PackageHeader { int headerLen; int timeStamp; short cmd }; 为了保证单字节对齐,可以加上编译选项 #pragma pack(1) 可惜的是,golang里面,没有这样的编译选项,猥琐的可参考的山寨代码如下 package main import ( "encoding/binary" "fmt" ) type TestSt

【Python基础】格式化打印

''' 1.能够很规范的打印出想要的内容 2.双引号内没有办法放变量 ''' ## 格式化输入 # %s 输入任意扥内容都不会报错因为全部当做str来处理 # %d 只能输入数字 #案例一 name = input("Name: ") age = input("Age: ") hosttown = input("HostTown: ") info = ''' Name: %s Age:%s Hosttown: %s '''%(name,age,h