Sie drucken eine Aufzählung, die Stringer mit "% v" implementiert, es wird seinen String-Wert drucken. Wenn Sie dieselbe Enumeration in einer Struktur deklarieren und die Struktur mit "% v" drucken, wird der numerische Wert von enum ausgegeben. Gibt es eine Möglichkeit, den Zeichenfolgenwert eines Aufzählungsfelds zu drucken?Wie mache ich Go Enum Felder als String drucken?
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 http://stackoverflow.com/questions/27187132/is- Es gibt keine Möglichkeit, den Namen der Enumeration in go zu erhalten. Sie müssen eine lut mit einem Tool wie stringify – GarMan
@GarMan erstellen Die Frage ist nicht a Wie man die 'String()' Methode schreibt oder generiert, es geht darum, dass er bereits '' String() 'hinzugefügt hat, aber das' fmt' Paket ruft es nicht auf wenn eine Instanz eines Wrappers 'struct' (oder ein Zeiger dazu) wird gedruckt. – icza
@Gatis Sie müssen das Feld exportieren. Ich habe die Antwort mit einem Beispiel hinzugefügt.Bitte überprüfen Sie, und wenn es Ihr Problem löst, akzeptieren Sie es –