2016-09-13 20 views
5

संदर्भ में विभिन्न प्रकार के स्लाइसों का स्लाइस संदर्भ: मैं 2-डी फीचर वेक्टर बनाने के लिए गोलांग में स्लाइस डेटा संरचना का उपयोग करना चाहता हूं। यह फीचर वेक्टर एक टुकड़ा होना चाहिए जिसमें विभिन्न प्रकार के स्लाइस होते हैं, कभी-कभी तार, int, float64 आदिगोलांग

अभी तक, मैं इसे मानचित्र (नीचे) से प्राप्त कर सकता हूं, क्या इसे लागू करने का कोई तरीका है एक टुकड़ा?

map := make(map[int]interface{}} 

क्या अधिक की तरह होना चाहिए:

featureVector := []interface{[]int, []float64, []string ...} 

उत्तर

5

यह काम करता है के रूप में उम्मीद, तो आप सिर्फ गलत सिंटैक्स का उपयोग कर रहे हैं। टुकड़ा के तत्व प्रकार interface{} है, तो एक composite literal प्रारंभ करने में यह इस उदाहरण की तरह []interface{}{ ... } की तरह दिखना चाहिए,:

featureVector := []interface{}{[]int{1, 2}, []float64{1.2, 2.2}, []string{"a", "b"}} 

और आप इसे किसी भी अन्य टुकड़ा की तरह व्यवहार कर सकते हैं:

featureVector = append(featureVector, []byte{'x', 'y'}) 
fmt.Printf("%#v", featureVector) 

आउटपुट (Go Playground पर यह कोशिश):

[]interface{}{[]int{1, 2}, []float64{1.2, 2.2}, []string{"a", "b"}, []uint8{0x78, 0x79}} 

लेकिन वह जानते हैं के बाद से तत्व प्रकारहै

featureVector = append(featureVector, "abc") // OK 

यह भी map समाधान के साथ लागू होता है:, कुछ भी नहीं एक गैर टुकड़ा संलग्न करने के लिए किसी को भी रोकता है।

+0

ठीक है, अगर हम तकनीकी हैं, तार _essentially_ स्लाइस हैं। वे स्वतंत्र रूप से '[] बाइट' और वापस करने के लिए परिवर्तनीय हैं। एकमात्र कार्यात्मक अंतर यह है कि स्लाइस अपरिवर्तनीय हैं, और उनकी स्लाइस हेडर संरचना एक मशीन शब्द छोटी है क्योंकि उनकी टोपी और लेन परिभाषा के बराबर होती हैं। – Kaedys

+0

@Kaedys एक एकल 'स्ट्रिंग' मान जोड़ना सिर्फ एक उदाहरण था, मैं अभी भी 'int' का उपयोग कर सकता था। और यदि हम इसमें हैं: एक 'स्ट्रिंग' बाइट्स _in effect_ का केवल-पढ़ने वाला टुकड़ा है, लेकिन यह एक टुकड़ा नहीं है। भाषा की कल्पना इसे कई मामलों में एक टुकड़ा के समान इलाज करने की अनुमति देती है, लेकिन फिर भी 'प्रतिबिंबित करें। टाइप करें ("abc")। Kind() == प्रतिबिंबित करें। स्लाइस' 'false' है। – icza