2017-01-05 20 views
7

आप एक enum मुद्रित करते हैं जो "% v" का उपयोग कर स्ट्रिंगर लागू करता है, यह इसके स्ट्रिंग मान को प्रिंट करेगा। यदि आप एक संरचना के अंदर एक ही enum घोषित करते हैं और "% v" का उपयोग कर संरचना मुद्रित करते हैं, तो यह enum के numeric value को प्रिंट करेगा। क्या एनम फ़ील्ड के स्ट्रिंग वैल्यू को मुद्रित करने का कोई तरीका है?स्ट्रिंग के रूप में गो प्रिंट एनम फ़ील्ड कैसे बनाएं?

नमूना (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) 
} 

प्रिंटों:

Foo 
&{1} 
&{field:1} 
&main.MyStruct{field:1} 
+0

इस का एक dup है http://stackoverflow.com/questions/27187132/is- यह संभव-से-गेट-एनम-नाम-बिना-निर्माण-स्ट्रिंग-इन-गोलांग, जाने के लिए enum का नाम पाने का कोई तरीका नहीं है, आपको – GarMan

+0

@GarMan को स्ट्रिंग करने जैसे टूल के साथ लूट बनाने की आवश्यकता है सवाल एक नहीं है 'स्ट्रिंग()' विधि को लिखने या उत्पन्न करने के बारे में बताएं, यह पहले से ही 'स्ट्रिंग()' को जोड़ता है, फिर भी 'fmt' पैकेज इसे कॉल नहीं करता है जब एक रैपर' स्ट्रक्चर '(या पॉइंटर) इसे करने के लिए) मुद्रित है। – icza

+1

@ गैटिस आपको फ़ील्ड को निर्यात करने की आवश्यकता है। मैंने नमूना के साथ जवाब जोड़ा है। कृपया जांचें और अगर यह आपकी समस्या को हल करता है तो इसे स्वीकार करें –

उत्तर

5

आप क्षेत्र exported बनाने की जरूरत है, यानी आप के रूप में

type MyStruct struct { 
    Field MyEnum 
} 

यहाँ एक है struct घोषित कर सकता है exported औरके साथ नमूना कार्यक्रम 210 क्षेत्रों

कोड

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 { 
    Field1 MyEnum 
    field2 MyEnum 
} 

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

आउटपुट

Foo 
&{Foo 2} 
&{Field1:Foo field2:2} 
&main.MyStruct{Field1:1, field2:2} 

यहाँ खेलने लिंक है: https://play.golang.org/p/7knxM4KbLh

+2

यदि आप चाहते हैं कि '% # v' स्ट्रिंग को भी दिखाना है जिसे आपको 'fmt.GoStringer' को लागू करने की आवश्यकता है –

संबंधित मुद्दे