"% v" kullanarak Stringer uygulayan bir numara yazdıysanız, dize değerini yazdıracak. Aynı enum bir yapının içinde bildirir ve "% v" kullanarak yapıyı yazdırırsanız, enum'un sayısal değerini yazdıracaktır. Bir alanın dize değerini yazdırmanın bir yolu var mı?Nasıl Yapılır Enum alanları dize olarak yazdırılır?
Numune (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)
}
Baskılar: Sen alanını exported
yapmak gerekir
Foo
&{1}
&{field:1}
&main.MyStruct{field:1}
Bu bir dup olduğunu http://stackoverflow.com/questions/27187132/is- o-almak-enum-isim-oluşturmadan-string-in-golang, gitmek enum adını almak için bir yolu yoktur, – GarMan
@GarMan stringify gibi bir araç ile lut oluşturmak gerekir Soru bir değil "String()" yöntemini nasıl yazacağını veya yazacağını, "String()' yi zaten eklediğini, "fmt" paketinin bir sarıcı 'struct' (veya bir işaretçinin) örneğinde olmadığını ona) yazdırılır. – icza
@Gatis alanı dışa aktarmanız gerekiyor. Ben bir örnek ile cevabı ekledim.Lütfen kontrol edin ve eğer sorununuzu çözerse bu sorunu kabul edin –