2016-05-31 2 views
0

Normalerweise kann ich alle Eigenschaften eines Objekts drucken mit:Drucken Sie alle Eigenschaften von struct, selbst wenn diese Struktur eine Standard-String-Repräsentation hat?

c.Infof("car: %+v", car) 

Aber eine Struktur hat eine String() Methode. Ich denke, dass dies die obige Zeile veranlasst, nur das zu drucken, was die Methode String() zurückgibt.

Wie kann ich dies überschreiben und erzwinge drucken alle Eigenschaften dieser Struktur?

+0

Bitte, was Sie versuchen, genau das zu erreichen? Die Frage ist eigentlich unklar. –

+0

Fügen Sie auch ein Code-Snippet ein. – khrm

+0

Ich wusste nicht, dass es so unklar sein würde. Ill poste es morgen, wenn ich wieder an meinem Computer bin – user1283776

Antwort

6

Eine einfache Abhilfe ist das %#v Verb verwenden:

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}) 
} 

Diese Drucke:

this is the end 
main.someStruct{a:1, b:2} 
+0

Wow kannte das noch nicht. Sehr nützlich .... – RickyA

+2

@RickyA: es hilft, die ['fmt' Dokumentation zu lesen:] (https://golang.org/pkg/fmt/)'% # v \t eine Go-Syntax-Darstellung des Wertes '. (Beachten Sie, dass '% # v' auch über die GoStringer-Schnittstelle geändert werden kann) – JimB

Verwandte Themen