2015-02-12 8 views
11

जाओ में पर Golang में 'ठीक है', निम्न कार्य करता (मानचित्र में से एक उपयोग पर ध्यान दें है एक वापसी, अन्य दो रिटर्न है)वापसी मानचित्र की तरह सामान्य कार्यों

package main 

import "fmt" 

var someMap = map[string]string { "some key": "hello" } 

func main() { 
    if value, ok := someMap["some key"]; ok { 
     fmt.Println(value) 
    } 

    value := someMap["some key"] 
    fmt.Println(value) 
} 

हालांकि, मैं पता नहीं है अपने काम के साथ यह वही काम कैसे करें। क्या map जैसे वैकल्पिक रिटर्न के साथ समान व्यवहार होना संभव है?

package main 

import "fmt" 

func Hello() (string, bool) { 
    return "hello", true 
} 

func main() { 
    if value, ok := Hello(); ok { 
     fmt.Println(value) 
    } 

    value := Hello() 
    fmt.Println(value) 
} 

अभ्यस्त ... वहाँ समारोह Hello() के लिए इस वाक्य काम करने के लिए एक रास्ता है (त्रुटि multiple-value Hello() in single-value context के कारण) संकलन:

उदाहरण के लिए

?

उत्तर

17

map अलग है क्योंकि यह एक अंतर्निहित प्रकार है और कोई फ़ंक्शन नहीं है। map के तत्व को एक्सेस करने के 2 रूप Go Language Specification: Index Expressions द्वारा निर्दिष्ट किए गए हैं।

कार्यों के साथ आप यह नहीं कर सकते हैं। यदि किसी फ़ंक्शन में 2 रिटर्न वैल्यू हैं, तो आपको उनमें से दोनों को "उम्मीद" करना होगा या कोई भी नहीं।

हालांकि आप के लिए वापसी से कोई भी मान आवंटित करने के लिए अनुमति दी जाती है Blank identifier:

s, b := Hello() // Storing both of the return values 

s2, _ := Hello() // Storing only the first 

_, b3 := Hello() // Storing only the second 

तुम भी वापसी से कोई भी मान स्टोर करने के लिए नहीं चुन सकते हैं:

Hello()   // Just executing it, but storing none of the return values 

नोट: यदि आप कर सकते थे रिक्त पहचानकर्ता को दोनों रिक्त मान भी असाइन करें, हालांकि इसका कोई उपयोग नहीं है (यह सत्यापित करने के अलावा कि इसमें वास्तव में 2 रिटर्न मान हैं):

_, _ = Hello()  // Storing none of the return values; note the = instead of := 

आप इन्हें Go Playground पर भी आजमा सकते हैं।

हेल्पर समारोह

आप इसे कई बार इस्तेमाल करते हैं और आप, खाली पहचानकर्ता का उपयोग एक सहायक समारोह जो 2 वापसी मान को छोड़ देता है बनाने के लिए नहीं करना चाहते हैं:

func Hello2() string { 
    s, _ := Hello() 
    return s 
} 

और अब आप कर सकते हैं:

value := Hello2() 
fmt.Println(value) 
+2

मैं जितना संदेह था, लेकिन यकीन है कि के रूप में मैं मुसीबत डॉक्स/एक निश्चित जवाब के लिए googling था नहीं था। दस्तावेज़ों के संदर्भ के लिए भी धन्यवाद! –

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