2014-06-29 5 views
8

के अंदर परिवर्तनीय दायरा मैंने अभी आज सीखना शुरू कर दिया है और वेरिएबल स्कॉप्स पर फंस गए हैं।गोलांग: बयान

मैं आखिरकार इस तथ्य के बारे में उलझन में हूं कि मैं एक कथन के अंदर एक चर नहीं बना सकता और बाद में इसका उपयोग कर सकता हूं।

यह मेरा कोड है। समस्या यह है कि अगर नया कथन से पहले नया 1 नहीं बनाया जा सकता है क्योंकि इसका आकार if स्टेटमेंट के परिणाम पर निर्भर है, और अगर इसे कथन के अंदर बनाकर मैं इसे कथन के समाप्त होने के बाद उपयोग नहीं कर सकता।

if len(array1)>len(array2) { 
    new1 := make([]string,0,len(array1)) 
    mc := Array2Map_string(array1) 
    for _,tok :=range array2 { 
     _, ok := mc[tok] 
     if ok { 
      new1[len(new1)]=tok 
      } 
     } 
    } else { 
    new1 := make([]string,0,len(array2)) 
    mc := Array2Map_string(array2) 
    for _,tok :=range array1 { 
     _, ok := mc[tok] 
     if ok { 
      new1[len(new1)]=tok 
      } 
     } 
    } 
new2 := make([]string,0,len(new1)) 
copy(new2, new1) 

केवल एक चीज मैं के बारे में सोच सकते हैं

var pointlessvariable uint 
if len(array1)>len(array2) { 
pointlessvariable=len(array1) 
} else { 
pointlessvariable=len(array2) 
} 
var new1 = make([]string,0,pointlessvariable) 
if len(array1)>len(array2) { 
... 

की तरह कुछ करने के लिए काफी ईमानदारी से कहूं तो अगर है कि वास्तव में समाधान तो मुझे नहीं लगता कि मैं सब के बाद Golang उपयोग करना चाहते हैं है।

तो इसे हल करने का सबसे अच्छा तरीका क्या है?

उत्तर

10

आप if ब्लॉक से पहले new1 घोषित करने और अंदर make उपयोग कर सकते हैं:

var new1 []string 

if len(array1)>len(array2) { 
    new1 = make([]string, 0, len(array1)) 
    // instructions ... 
} else { 
    new1 = make([]string, 0, len(array2)) 
    // other instructions ... 
} 

new2 := make([]string, 0, len(new1)) 
copy(new2, new1) 
+0

ठीक है, धन्यवाद। तो क्या वह सरणी वास्तव में पहली पंक्ति पर बनाई गई है, या क्या यह केवल इसे बनाने के लिए तैयार है और अधिक वैश्विक दायरा है? – Alasdair

+0

यह एक सरणी नहीं बल्कि एक टुकड़ा है। यह पहली पंक्ति पर बनाया गया है, लेकिन इसकी लंबाई 0 है जब तक कि आप इसकी लंबाई (और क्षमता) को परिभाषित करने के लिए 'मेक' का उपयोग न करें। लेकिन आप अभी भी शून्य के आकार के टुकड़े का उपयोग उदाहरण के लिए 'एपेंड' के साथ कर सकते हैं: 'मेक' एकमात्र समाधान नहीं है। – julienc

+0

उलझन में :) धन्यवाद – Alasdair