2012-09-17 15 views
8

मैं एक का चयन करें बयान है कि मैं कुछ भी नहीं करना है, बस जारी रखने के लिए चाहता हूँ में एक डिफ़ॉल्ट कारण है, लेकिन लाइन को खाली छोड़ हो रहाजाओ - पायथन के "पास" के बराबर क्या है?

 select { 
     case quit_status := <-quit: 
      if quit_status == true { 
       fmt.Printf("********************* GOROUTINE [%d] Received QUIT MSG\n", id) 
       return 
      } 
     default: 
      fmt.Printf("GOROUTINE [%d] step: %d, NO QUIT MSG\n", id, i) 
     } 
+0

आप डिफ़ॉल्ट बयान पूरी तरह से निकालने की कोशिश की? –

+0

क्या आप केवल 'डिफ़ॉल्ट' खंड को पूरी तरह से छोड़ नहीं सकते? – verdesmarald

उत्तर

9

एक select बयान में default मामले करने का इरादा है से बयान में कुछ भी बंद हो जाता है चैनल पढ़ने और लिखने के लिए गैर-अवरुद्ध I/O प्रदान करें। default मामले में कोड तब भी निष्पादित किया जाता है जब भी किसी भी मामले में कोई भी चैनल पढ़ने/लिखने के लिए तैयार नहीं होता है।

तो आपके मामले में, default ब्लॉक निष्पादित किया गया है यदि छोड़ने वाले चैनल के पास कुछ भी कहना नहीं है। आप केवल डिफ़ॉल्ट केस को हटा सकते हैं और यह quit_status := <-quit केस पर तब तक अवरुद्ध होगा जब तक कोई मान quit में उपलब्ध न हो .. जो शायद इस उदाहरण के बाद आप क्या कर रहे हैं।

आप तुरंत चयन बयान के बाद कोड को क्रियान्वित जारी रखना चाहते हैं, तो आपको एक अलग goroutine में इस बयान का चयन चलाना चाहिए:

go func() { 
    select { 
    case quit_status := <-quit: 
     ... 

    } 
}() 

// Execution continues here immediately. 
+4

इसे किसी अन्य goroutine में चलाने का कोई कारण नहीं है। आप केवल 'डिफ़ॉल्ट' डाल सकते हैं, फिर अगली पंक्ति पर चयन कथन बंद करें। "पास" का जाने वाला संस्करण कुछ भी नहीं डालना है। –

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