(Отказ от ответственности: я думаю, что лучше использовать% q для отладочной печати, но это зависит от ваших потребностей. Я добавляю эту альтернативу только потому, что интерфейс GoStringer представляет собой интересный трюк) .
Другим выходом за пределы% q является обертывание байта [] типом, реализующим интерфейс GoStringer, который будет вызываться для форматирования %#v
. Допустим, у нас есть:
type PrintableBuffer []byte
func (b PrintableBuffer) GoString() string {
return string(b)
}
Теперь мы определяем структуру:
type foo struct {
number int
Data PrintableBuffer
}
(чтобы этот трюк работал, нужно, чтобы член был опубликован c: /)
А потом:
func main() {
obj := foo{
number: 1,
Data: PrintableBuffer("json"),
}
fmt.Printf("Obj: %#v", obj)
}
Распечатает:
Obj: main.foo{number:1, Data:json}