打印结构的所有属性,即使该结构有一个默认的字符串表示?

use*_*776 0 go

通常,我可以打印对象的所有属性:

c.Infof("car: %+v", car)
Run Code Online (Sandbox Code Playgroud)

但是一个结构有一个String()方法.我认为这导致上面的行只打印String()方法返回的内容.

如何覆盖此并强制打印该结构的所有属性?

cni*_*tar 6

一个简单的解决方法是使用%#v动词:

package main

import (
    "fmt"
)

type someStruct struct {
    a int
    b int
}

func (someStruct) String() string {
    return "this is the end"
}

func main() {
    fmt.Printf("%+v\n", someStruct{1, 2})
    fmt.Printf("%#v\n", someStruct{1, 2})
}
Run Code Online (Sandbox Code Playgroud)

这打印:

this is the end
main.someStruct{a:1, b:2}
Run Code Online (Sandbox Code Playgroud)

  • @RickyA:通过[`fmt`文档:](https://golang.org/pkg/fmt/)`%#v读取值`的Go语法表示有助于阅读.(注意`%#v`也可通过GoStringer界面修改) (2认同)