2016-07-01 5 views
18

मैं ऐसे फ़ंक्शन को कॉल कर रहा हूं जो कोई मान नहीं है तो खाली सरणी लौटाता है।मैं खाली टुकड़ा की जांच कैसे करूं?

जब मैं यह कर यह काम नहीं करता:

if r == [] { 
    fmt.Println("No return value")    
} 

के आसपास मैं उपयोग कर रहा हूँ काम है:

var a [0]int 
if r == a { 
    fmt.Println("No return value")    
} 

लेकिन एक चर घोषित सिर्फ वापसी मान नहीं है की जाँच करने के सही लगता है। ऐसा करने का बेहतर तरीका क्या है?

+2

जाओ जावास्क्रिप्ट नहीं है! मूल बातें पढ़ें: https://golang.org/doc/effective_go.html –

+4

और चीजें - पहला - सरणी एक टुकड़ा नहीं है। ऐरे प्रकार है, जिसमें तत्वों की संख्या निश्चित है, इसलिए प्रश्न केवल स्लाइस के लिए समझ में आता है। दूसरा - यदि आप उन स्लाइसों को प्रारंभ करते हैं, तो यह काम नहीं करेगा। तीसरा - और क्या लेन (ए) == 0 के बारे में? – lofcek

+0

क्या आपका कामकाज संकलित है? मैं नहीं देख सकता कि यह तब तक कैसे होगा जब तक 'आर' प्रकार '[0] int' प्रकार भी नहीं है, लेकिन उस स्थिति में दो (खाली) सरणी हमेशा बराबर की तुलना करेंगे। –

उत्तर

24

len() स्लाइस या सरणी में तत्वों की संख्या देता है।

whatever() मानते हुए, समारोह आप आह्वान है आप की तरह कुछ कर सकते हैं:

r := whatever() 
if len(r) > 0 { 
    // do what you want 
} 

या यदि आप

if len(whatever()) > 0 { 
    // do what you want 
} 
6

आइटम की जरूरत नहीं है तुम बस len फ़ंक्शन का उपयोग कर सकते हैं।

if len(r) == 0 { 
    fmt.Println("No return value")    
} 

हालांकि जब से तुम सरणियों का उपयोग कर रहे, प्रकार [0]int (आकार 0 के साथ पूर्णांक की एक सरणी) की एक सरणी से [n]int (आकार n के साथ int की n सरणी) अलग है और एक दूसरे के साथ संगत नहीं हैं।

आप एक समारोह है कि अलग-अलग लंबाई के साथ सरणियों देता है, स्लाइस का उपयोग करें, क्योंकि समारोह केवल एक विशिष्ट लंबाई वाले एक सरणी वापसी प्रकार के साथ घोषित किया जा सकता है, तो (func f() [n]int जैसे, n एक निरंतर है) और उस सरणी n होगा इसमें मूल्य (वे शून्य हो जाएंगे) भले ही फ़ंक्शन उस सरणी में कभी भी कुछ नहीं लिखता हो।

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