2012-11-11 12 views
53

यहां क्या हो रहा है?बाईं ओर कोई नया चर नहीं: =

package main 

import "fmt" 

func main() { 

    myArray :=[...]int{12,14,26} ;  
    fmt.Println(myArray) 

    myArray :=[...]int{11,12,14} //error pointing on this line 

    fmt.Println(myArray) ; 

} 

यह एक त्रुटि है कि कहते हैं

no new variables on left side of := 

मैं क्या कर रहा था फिर से असाइन करने में पहले से ही घोषित चर के लिए मान गया था फेंकता है।

उत्तर

73

दूसरे कथन से colon : हटाएं क्योंकि आप मौजूदा चर के लिए एक नया मान असाइन कर रहे हैं।

myArray = [...]int{11,12,14} 

colon : प्रयोग किया जाता है जब आप कम घोषणा और पहली बार के लिए काम प्रदर्शन के रूप में आप अपने पहले बयान अर्थात myArray :=[...]int{12,14,26} में कर रहे हैं।

21

और = पर दो प्रकार के असाइनमेंट ऑपरेटर हैं। वे अर्थात् समकक्ष हैं (असाइनमेंट के संबंध में) लेकिन पहला भी "लघु परिवर्तनीय घोषणा" (http://golang.org/ref/spec#Short_variable_declarations) है जिसका अर्थ है कि बाईं ओर हमें कम से कम एक नया चर घोषित करने की आवश्यकता है।

आप एक साधारण असाइनमेंट बयान := से पीछे नहीं बदल सकते हैं ->= या कि अगर आपके एल्गोरिथ्म के साथ ठीक है आप एक नया चर का उपयोग कर सकते हैं।

6
myArray :=[...]int{12,14,26} 

जैसा कि पिछले टिप्पणीकर्ताओं ने कहा, := शॉर्ट हाथ और/या चर घोषणा की लघु-रूप का एक प्रकार है।

तो ऊपर की स्थिति में आप दो चीजें कर रहे हैं।

  1. आप घोषित अपने चर myArray होने के लिए कर रहे हैं।
  2. आप myArray चर के पूर्णांक की एक सरणी निर्दिष्ट कर रहे हैं।

अपने कोड के दूसरे भाग में विफल रहता है, क्योंकि जो तुम यहाँ क्या कर रहे हैं:

myArray :=[...]int{11,12,14} //error pointing on this line 

फिर से घोषित मौजूदा चर myArray, जो पहले से ही पूर्णांक मान शामिल है।

यह काम करता है:

myArray = [...]int{11,12,14} //error pointing on this line 

वजह से, यह बताए मौजूदा (पूर्व घोषित/initialized) अलग-अलग करने के लिए पूर्णांक सरणी है।

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