2012-10-16 13 views
55

जाओ भाषा[] स्ट्रिंग और ... गोलांग में स्ट्रिंग के बीच क्या अंतर है?

[]string में स्ट्रिंग सरणी

है और हम भी पैरामीटर

क्या अंतर है के रूप में ...string का उपयोग करें?

समारोह परिभाषा:

func f(args ...string) {} 

और मैं नीचे की तरह इस समारोह कॉल कर सकते हैं?

args := []string{"a", "b"} 

f(args) 

उत्तर

89

[]string स्ट्रिंग सरणी

तकनीकी तौर पर यह एक टुकड़ा है कि एक अंतर्निहित सरणी का संदर्भ

और हम भी ...string पैरामीटर

क्या अंतर है के रूप में उपयोग है?

संरचना के संबंध में, वास्तव में कुछ भी नहीं। सिंटैक्स दोनों के परिणामस्वरूप डेटा प्रकार समान है।

... पैरामीटर सिंटैक्स एक भिन्न पैरामीटर बनाता है। यह शून्य या अधिक string तर्क स्वीकार करेगा, और उन्हें एक टुकड़ा के रूप में संदर्भित करेगा।

सम्मान के साथ

f बुला लिए, आप निम्न संरचना के साथ variadic पैरामीटर में तार का एक टुकड़ा पारित कर सकते हैं:

func f(args ...string) { 
    fmt.Println(len(args)) 
} 


args := []string{"a", "b"} 

f(args...) 

इस वाक्य रचना या तो शाब्दिक वाक्य रचना का उपयोग करके बनाया टुकड़ा, या टुकड़ा के लिए उपलब्ध है विविधता पैरामीटर का प्रतिनिधित्व करता है (क्योंकि उनके बीच वास्तव में कोई अंतर नहीं है)

http://play.golang.org/p/QWmzgIWpF8

+0

आपको बहुत धन्यवाद ~ यह जवाब मैं चाहता हूं कि मैं – user1746360

+7

'[] स्ट्रिंग 'एक टुकड़ा है, एक सरणी नहीं है। एक सरणी और टुकड़ा के बीच अंतर सूक्ष्म लेकिन महत्वपूर्ण हैं। –

+0

@ स्टीफन वेनबर्ग: हां, "वास्तव में कुछ भी नहीं" का जवाब "अंतर क्या है" उद्धरण का जवाब उस प्रश्न का उत्तर दे रहा है जिसे वैरैडिक फ़ंक्शन पैरामीटर द्वारा उत्पन्न टुकड़े के बीच अंतर के बारे में पूछा गया था, और '[] स्ट्रिंग का उपयोग करके बनाया गया एक वाक्यविन्यास मैं इसे स्पष्ट करने के लिए अपने उत्तर में अधिक उद्धरण जोड़ दूंगा। :-) –

12

दोनों तारों की एक सरणी बनाते हैं, लेकिन अंतर यह कहता है कि इसे कैसे कहा जाता है।

func f(args ...string) { 

} 
// Would be called like this: 

f("foo","bar","baz"); 

यह आपको (एक ही प्रकार के सभी) किसी चर तर्क की संख्या

इस का एक महान उदाहरण fmt.Print और दोस्तों है, के रूप में आप चाहते हैं जो के रूप में, उतने कम या arugments स्वीकार कर सकते हैं स्वीकार करने के लिए अनुमति देता है ।

+0

मुझे कोई जाओ विशेषज्ञ हूँ, लेकिन variadic तर्क नहीं एक और अन्य एक सारिणी का तर्क है, और दो अलग-अलग अन्य भाषाओं में की तरह नहीं कर रहे हैं? –

+1

@ लाइटनेसरेसेसिन ऑर्बिट यूप। अगर यह स्पष्ट नहीं है तो भ्रम के लिए खेद है। दोनों सरणी बनाने के बारे में पहली पंक्ति का मतलब है कि दोनों उदाहरणों में परिणामी तर्क एक सरणी है। यह लगभग पाइथन के 'डीफ एफएन (* तर्क)' निर्माण के समान है। – tylerl

+0

तो गो सरणी तर्कों को एक सरणी प्रकार के उदाहरण के रूप में उजागर करता है? यह प्रसन्न है। –

2

यहाँ आप क्या चाहते है:

var args []string = []string{"A", "B", "C"} 

func Sample(args ...string) { 
    for _, arg := range args { 
     fmt.Println(arg) 
    } 
} 

func main() { 
    Sample(args...) 
} 

खेल: http://play.golang.org/p/N1ciDUKfG1

0

यह अपने समारोह मापदंडों सरल करता है।यहां एक उदाहरण दिया गया है (https://play.golang.org/p/euMuy6IvaM): विधि नमूनाइलीप्सिस शून्य से कई प्रकार के मानकों को स्वीकार करता है लेकिन विधि में नमूनाअरे यह अनिवार्य है घोषित घोषित किया जाना है।

package main 

import "fmt" 

func SampleEllipsis(args ...string) { 
    fmt.Printf("Sample ellipsis : %+v\n",args) 
} 


func SampleArray(args []string) { 
    fmt.Println("Sample array ") 
    SampleEllipsis(args...) 
} 

func main() { 
    // Method one 
    SampleEllipsis([]string{"A", "B", "C"}...) 
    // Method two 
    SampleEllipsis("A", "B", "C") 
    // Method three 
    SampleEllipsis() 

    // Simple array 
    SampleArray([]string{"A", "B", "C"}) 

    // Simple array 
    SampleArray([]string{}) 

} 

रिटर्न:

Sample ellipsis : [A B C] 
Sample ellipsis : [A B C] 
Sample ellipsis : [] 
Sample array 
Sample ellipsis : [A B C] 
Sample array 
Sample ellipsis : [] 
संबंधित मुद्दे