Użytkownik drukuje wyliczenie, które implementuje Stringer za pomocą "% v", wydrukuje jego wartość ciągu. Jeśli zadeklarujesz to samo wyrażenie wewnątrz struktury i wydrukujesz strukturę używając "% v", wydrukuje ona wartość numeryczną enum. Czy istnieje sposób drukowania wartości ciągu pól wyliczeniowych?Jak wykonać Go, aby wydrukować pola enum jako ciąg?
Przykładowe (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)
}
Wydruki:
Foo
&{1}
&{field:1}
&main.MyStruct{field:1}
To dup z http://stackoverflow.com/questions/27187132/is- to-możliwe-do-uzyskania-enum-name-bez-tworzenia-string-in-golang, nie ma sposobu, aby uzyskać nazwę enum w go, musisz stworzyć lut za pomocą narzędzia takiego jak stringify – GarMan
@GarMan Pytanie nie jest o tym, jak napisać lub wygenerować metodę 'String()', chodzi o to, że już dodał 'String()', ale pakiet 'fmt' nie wywołuje go, gdy instancja wrapper' struct' (lub wskaźnik do niego) jest drukowany. – icza
@Gate musisz wyeksportować pole. Dodałem odpowiedź z próbką. Sprawdź i jeśli to rozwiązuje problem, zaakceptuj to. –