मुझे उत्सुकता है कि गो क्यों नहीं []T
है []interface{}
जब यह अंतर्निहित रूप से परिवर्तित T
हो जाएगा interface{}
। क्या इस रूपांतरण के बारे में कुछ गैर-तुच्छ है जो मुझे याद आ रही है?
उदाहरण:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
शिकायत
फ़ंक्शन तर्क में टाइप [] इंटरफ़ेस {} के रूप में (टाइप [] स्ट्रिंग) का उपयोग नहीं किया जा सकता है
और अगर मैं इसे स्पष्ट रूप से करने की कोशिश करता हूं, तो एक ही बात: b := []interface{}(a)
शिकायत करता है
एक प्रकार ([] स्ट्रिंग) को टाइप करने के लिए [] इंटरफ़ेस {} में नहीं बदल सकता
इसलिए हर बार मुझे इस रूपांतरण को करने की जरूरत है (जो बहुत ऊपर आता है), मैं कुछ इस तरह कर रहा हूं:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
क्या ऐसा करने का एक बेहतर तरीका है, या मानक पुस्तकालय इन रूपांतरणों की सहायता के लिए कार्य करता है? हर बार जब मैं एक फ़ंक्शन को कॉल करना चाहता हूं, तो कोड की 4 अतिरिक्त पंक्तियों को लिखने के लिए यह मूर्खतापूर्ण लगता है जो कि उदाहरण के लिए इन्ट्स या स्ट्रिंग्स की सूची ले सकता है।