使用golang打印可读变量

使用golang打印可读变量,go,Go,如何以可读的方式打印地图、结构或任何东西 使用PHP,您可以实现这一点 echo '<pre>'; print_r($var); echo '</pre>'; 您可以使用fmt.Println()进行打印。您需要导入“fmt”包(参见下面的示例)。许多数据类型可以直接打印。如果要获得自定义类型的可读打印,则需要为该类型定义一个String()String方法 要尝试以下示例,请单击此处: 使用Go软件包。比如说, var "var" map[content-type:t

如何以可读的方式打印地图、结构或任何东西

使用PHP,您可以实现这一点

echo '<pre>';
print_r($var);
echo '</pre>';

您可以使用
fmt.Println()
进行打印。您需要导入“fmt”包(参见下面的示例)。许多数据类型可以直接打印。如果要获得自定义类型的可读打印,则需要为该类型定义一个
String()String
方法

要尝试以下示例,请单击此处:

使用Go软件包。比如说,

var
"var"
map[content-type:text/plain]
map[string]string{"content-type":"text/plain"}
输出:

import "fmt" 

概述

包fmt使用类似于C的函数实现格式化I/O printf和scanf。格式“verbs”源自C,但是 更简单


对于调试,我使用以下方法:

fmt.Printf("%v", whatever) 
func printVars(w io.Writer、writePre bool、vars…接口{}){
如果写入{
io.WriteString(w,“\n”)
}
对于i,v:=范围变量{
fmt.Fprintf(w,»物料%d类型%T:\n”,i,v)
j、 错误:=json.marshallindent(v,“,”)
开关{
案例错误!=零:
fmt.Fprintf(w,“错误:%v”,错误)
案例len(j)<3://{},空结构或空字符串,通常表示未报告的结构字段
w、 写入([]字节(html.EscapeString(fmt.Sprintf(“%+v”,v)))
违约:
w、 写入(j)
}
w、 写入([]字节(“\n\n”))
}
如果写入{
io.WriteString(w,“\n”)
}
}

在Go中类似于PHP中的print_r()、var_dump()、var_export()。(
%v
是重要的部分。)


祝你好运

我认为在很多情况下,使用“%v”足够简洁:

从fmt包的文档页面:

%v默认格式的值。 打印结构时,加号标志(%+v)会添加字段名

%#v值的Go语法表示形式

以下是一个例子:

Go spew为Go数据结构实现了一个deep pretty打印机,以帮助调试


如果示例代码还显示了
%+v
%v
,则更好。如果要生成HTML,请不要使用显式Fprintf()语句,除非您确实知道自己在做什么。首选
html/template
,它可以进行正确的转义。上面编写的代码容易受到微不足道的注入攻击。不要那样做P
var
"var"
map[content-type:text/plain]
map[string]string{"content-type":"text/plain"}
import "fmt" 
func printVars(w io.Writer, writePre bool, vars ...interface{}) {
    if writePre {
        io.WriteString(w, "<pre>\n")
    }
    for i, v := range vars {
        fmt.Fprintf(w, "» item %d type %T:\n", i, v)
        j, err := json.MarshalIndent(v, "", "    ")
        switch {
        case err != nil:
            fmt.Fprintf(w, "error: %v", err)
        case len(j) < 3: // {}, empty struct maybe or empty string, usually mean unexported struct fields
            w.Write([]byte(html.EscapeString(fmt.Sprintf("%+v", v))))
        default:
            w.Write(j)
        }
        w.Write([]byte("\n\n"))
    }
    if writePre {
        io.WriteString(w, "</pre>\n")
    }
}
fmt.Printf("%v", whatever) 
fmt.Printf("%v", myVar)
package main

import "fmt"

func main() {
    // Define a struct, slice and map
    type Employee struct {
        id   int
        name string
        age  int
    }
    var eSlice []Employee
    var eMap map[int]Employee

    e1 := Employee{1, "Alex", 20}
    e2 := Employee{2, "Jack", 30}
    fmt.Printf("%v\n", e1)
    // output: {1 Alex 20}
    fmt.Printf("%+v\n", e1)
    // output: {id:1 name:Alex age:20}
    fmt.Printf("%#v\n", e1)
    // output: main.Employee{id:1, name:"Alex", age:20}

    eSlice = append(eSlice, e1, e2)
    fmt.Printf("%v\n", eSlice)
    // output: [{1 Alex 20} {2 Jack 30}]
    fmt.Printf("%#v\n", eSlice)
    // output: []main.Employee{main.Employee{id:1, name:"Alex", age:20}, main.Employee{id:2, name:"Jack", age:30}}

    eMap = make(map[int]Employee)
    eMap[1] = e1
    eMap[2] = e2
    fmt.Printf("%v\n", eMap)
    // output: map[1:{1 Alex 20} 2:{2 Jack 30}]
    fmt.Printf("%#v\n", eMap)
    // output: map[int]main.Employee{1:main.Employee{id:1, name:"Alex", age:20}, 2:main.Employee{id:2, name:"Jack", age:30}}
}