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

sam*_*mol 16 printf go

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"}})
}
Run Code Online (Sandbox Code Playgroud)

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

有没有办法让它打印:

{{"I want to see what is in here"}}

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

Cor*_*Nou 17

有一个叫做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)

}
Run Code Online (Sandbox Code Playgroud)

会给你这个输出:

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