2014-05-04 9 views
5

मैं समझता हूँ कि मुहावरेदार रास्ता तय करने में एक enum बनाने के लिए इस प्रकार है:गोलांग "नामांकित" enums?

type topicStatus int 

const (
    registered topicStatus = iota 
    active 
    inactive 
    pending-removal 
    removed 
) 

लेकिन अगर मैं एक और "enum" एक नाम "का पुन: उपयोग" करना चाहता है कि है, मैं कोई त्रुटि मिलती है:

type hotelVisit int 

const (
    registered hotelVisit = iota 
    checked-in 
    checked-out 
) 

यहां, यदि मैं इसे आज़माता हूं, तो मैं विषय के बीच अंतर नहीं कर सकता हूं। रजिस्टर्ड और रजिस्ट्रार के रूप में पंजीकृत "होटल" के रूप में पंजीकृत किया गया था - क्या "enum" नामों को "नेमस्पेस" नाम देने का कोई तरीका है?

+0

चेक-इन और चेक-आउट मान्य पहचानकर्ता नहीं हैं, न ही लंबित-हटाए गए हैं- सावधान रहें। – fuz

+0

मुझे यकीन है कि आप सभी इस दृष्टिकोण को देखना चाहते हैं: यो उपयोगकर्ता, इसे जांचें ... http://grokbase.com/t/gg/golang-nuts/146v6qf86w/go-nuts-idiomatic-way-to-constant -नामस्थान इसे आज़माएं। – Victor

उत्तर

7

प्रत्येक enums के लिए एक नया पैकेज बनाएं जिसे आप परिभाषित करना चाहते हैं। इसका मतलब है कि एक गो फ़ाइल के साथ एक उप-निर्देशिका बनाना है जिसमें "पैकेज विषय स्थिति" है जिसमें कॉन्स परिभाषा है (उप-निर्देशिका नाम पैकेज नाम के समान है)। याद रखें कि सभी स्थिरांक परिभाषित ऊपरी मामले होना चाहिए ताकि वे निर्यात योग्य हों। "hotelVisit" और जो भी आपको चाहिए, उसके लिए भी ऐसा ही करें। आपका प्रोग्राम इन पैकेजों को आयात करेगा और फिर आवश्यकतानुसार उनका उपयोग करेगा: hotelVisit.Registered, topicStatus.Registered।

9

कई सामान्य शब्द लोअर केस पहचानकर्ताओं के साथ नामस्थान को प्रदूषित करना जो नामकरण विवादों का कारण बनने की संभावना है, ऐसा कुछ नहीं है जिसे मैं मूर्खतापूर्ण मानता हूं। लगातार घोषणाओं के मुट्ठी भर रखने के लिए पैकेज बनाने के लिए ही चला जाता है।

मैं शायद कुछ इस तरह करते हैं:

type topicStatus int 

const (
    tsRegistered topicStatus = iota 
    tsActive 
    tsInactive 
    tsPendingRemoval 
    tsRemoved 
) 

type hotelVisit int 

const (
    hvRegistered hotelVisit = iota 
    hvCheckedIn 
    hvCheckedOut 
) 

अब आप घोषित करने और ts := tsPendingRemoval साथ प्रारंभ कर सकते हैं। संघर्ष नामकरण के छोटे जोखिम के साथ स्पष्ट और संक्षेप में।