Wie zu machen, Gehen Sie drucken enum-Felder als string?

Drucken Sie eine enum, die Stringer mit "%v", es wird gedruckt, dessen string-Wert. Wenn Sie deklarieren, die den gleichen enum innerhalb einer struct, und drucken Sie die Struktur mit "%v", es wird gedruckt, enum numerische Wert. Gibt es eine Möglichkeit zum drucken der string-Wert eines enum-Feld?

Probe (https://play.golang.org/p/AP_tzzAZMI):

package main

import (
    "fmt"
)

type MyEnum int

const (
    Foo MyEnum = 1
    Bar MyEnum = 2
)

func (e MyEnum) String() string {
    switch e {
    case Foo:
        return "Foo"
    case Bar:
        return "Bar"
    default:
        return fmt.Sprintf("%d", int(e))
    }
}

type MyStruct struct {
    field MyEnum
}

func main() {
    info := &MyStruct{
        field: MyEnum(1),
    }
    fmt.Printf("%v\n", MyEnum(1))
    fmt.Printf("%v\n", info)
    fmt.Printf("%+v\n", info)
    fmt.Printf("%#v\n", info)
}

Drucke:

Foo
&{1}
&{field:1}
&main.MyStruct{field:1}
  • Dies ist ein dup von stackoverflow.com/questions/27187132/... , es gibt keinen Weg, um den Namen der enum-in gehen, müssen Sie erstellen eine lut mit einem tool wie stringify
  • Die Frage ist nicht, wie zu schreiben oder zu generieren, die String() Methode, es geht darum das er schon Hinzugefügt wurde die String(), doch die fmt Paket nicht es nennen, wenn eine Instanz einer wrapper - struct (oder einen Zeiger darauf) gedruckt werden.
  • Sie müssen export-Bereich. Ich habe die Antwort mit einem Beispiel.Bitte überprüfen Sie und wenn es Ihr problem löst, es zu akzeptieren
  • Meine schlecht, ich falsch verstanden, @Sarathsp die Antwort richtig ist, bitte akzeptieren Sie es.
InformationsquelleAutor Igor Gatis | 2017-01-05
Schreibe einen Kommentar