go - 打印时如何取消引用字段?

标签 go printf

http://play.golang.org/p/joEmjQdMaS

package main

import "fmt"

type SomeStruct struct {
    somePointer *somePointer
}
type somePointer struct {
    field string
}

func main() {
    fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}})
}

这会打印出类似这样的内存地址 {0x10500168}

有没有办法让它打印出来:

{{"我想看看这里有什么"}}

这主要用于调试目的,如果我有一个包含 30 个指针字段的结构,我不想为 30 个字段中的每一个都执行 println 来查看其中的内容。

最佳答案

有一个很棒的包,叫做 go-spew .做你想做的事。

package main

import (
  "github.com/davecgh/go-spew/spew"
)

type (
  SomeStruct struct {
    Field1 string
    Field2 int
    Field3 *somePointer
  }
  somePointer struct {
    field string
  }
)

func main() {
  s := SomeStruct{
    Field1: "Yahoo",
    Field2: 500,
    Field3: &somePointer{"I want to see what is in here"},
  }
  spew.Dump(s)

}

会给你这个输出:

(main.SomeStruct) {
 Field1: (string) "Yahoo",
 Field2: (int) 500,
 Field3: (*main.somePointer)(0x2102a7230)({
  field: (string) "I want to see what is in here"
 })
}

关于go - 打印时如何取消引用字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980930/

相关文章:

php - 使用 sprintf 显示 WooCommerce 付款方式费用的不同文本标签

c - printf() 没有被执行

oop - 反射(reflect)嵌入结构的类型

multithreading - 提供多少逻辑处理器的运行时API是什么?

GORM协会

go - golang中的int16数字加float64

c - %02x 字符数组的格式说明符

go - 使用 gopacket 更改目标端口

c - printf 中的#flag 如何工作?

c - 基本C编程,printf函数