2013-12-12 8 views
8

में कोई प्रॉपर्टी सेट की गई है या नहीं, मैं यह देखने का प्रयास कर रहा हूं कि कोई संरचना प्रॉपर्टी सेट की गई है या नहीं, लेकिन मुझे कोई रास्ता नहीं मिल रहा है।यह जांचें कि कोई प्रॉपर्टी

मैं कुछ इस तरह है, लेकिन कोर्स के इस नहीं काम करता है उम्मीद:

type MyStruct struct { 
    property string 
} 

test := new(MyStruct) 
if test.property { 
    //do something with this 
} 

उत्तर

5

में देख सकते हैं जैसा dyoo कहा, तुम nil उपयोग कर सकते हैं यदि आपके struct गुण संकेत दिए गए हैं है। यदि आप उन्हें तारों के रूप में रखना चाहते हैं तो आप "" से तुलना कर सकते हैं। यहाँ एक नमूना है:

package main 

import "fmt" 

type MyStruct struct { 
    Property string 
} 

func main() { 
    s1 := MyStruct{ 
     Property: "hey", 
    } 

    s2 := MyStruct{} 

    if s1.Property != "" { 
     fmt.Println("s1.Property has been set") 
    } 

    if s2.Property == "" { 
     fmt.Println("s2.Property has not been set") 
    } 
} 

http://play.golang.org/p/YStKFuekeZ

+0

यदि आप शामिल हो सकते हैं मैं इसकी सराहना करेंगे गोलांग प्ले जैसी बाहरी सेवा पर भरोसा करने के बजाए आपके उत्तर में कोड नमूने, जो किसी अन्य स्थान पर जा सकते हैं। – nemo

2

आप संकेत दिए गए और उनके nil मूल्य उपयोग कर सकते हैं निर्धारित करने के लिए कुछ या निर्धारित किया गया है नहीं। उदाहरण के लिए, आप

type MyStruct struct { 
    property *string 
} 

तो property करने के लिए अपने संरचना को बदल या तो जिस स्थिति में यह स्थापित किया गया था एक स्ट्रिंग मान की ओर इशारा करते जा सकता है, या यह nil, जिस स्थिति में यह अभी तक सेट नहीं किया गया हो सकता है । यह एक दृष्टिकोण है कि Protobuf पुस्तकालय निर्धारित करने के लिए खेतों या सेट नहीं हैं का उपयोग करता है, जैसा कि आप https://code.google.com/p/goprotobuf/source/browse/README#83

+0

हाँ मैं यह जानता हूँ, लेकिन क्योंकि https://code.google.com/p/gcfg/ lib द्वारा किया जाता है मैं एक संदर्भ के लिए इसे बदल नहीं सकते हैं, धन्यवाद वैसे भी – mcuadros

-5

करने के लिए यह मूल्य को निजी बनाने और उस पर एक प्राप्त/सेट विधि का उपयोग किया जाएगा एक और तरीका है। एक बूल निर्धारित कर सकता है कि सेट है या नहीं।

type MyStruct struct { 
    isPropertySet bool 
    property string 
} 

func (my *MyStruct) SetProperty(val string) { 
    my.property = val 
    my.isPropertySet = true 
} 

func (my *MyStruct) IsPropertySet() bool { 
    return my.isPropertySet 
} 
+0

यह न केवल जटिलता को जोड़ता है बल्कि स्मृति को भी बर्बाद करता है। यदि आप बिल्कुल 'IsSet' फ़ंक्शन चाहते हैं तो आपको उस फ़ंक्शन में प्रकार के 'nil' मान की जांच करनी चाहिए। –

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