আমি কৌতূহল যে কেন গো সংক্ষিপ্ত রূপান্তর করবে []T
না []interface{}
যখন তা স্পষ্টত রূপান্তরিত T
হবে interface{}
। এই রূপান্তরটি সম্পর্কে আমি কি কিছু মিস করছি তা মিস করছি?
উদাহরণ:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
অভিযোগ
ফাংশন আর্গুমেন্টে টাইপ [] ইন্টারফেস {as হিসাবে কোনও (টাইপ [] স্ট্রিং) ব্যবহার করতে পারে না
এবং যদি আমি স্পষ্টভাবে এটি করার চেষ্টা করি তবে একই জিনিস: b := []interface{}(a)
অভিযোগ করে
একটি (টাইপ [] স্ট্রিং) [টাইপ [] ইন্টারফেসে রূপান্তর করতে পারে না {}
সুতরাং প্রতিবার যখনই এই রূপান্তরটি করা দরকার (যা অনেকটা সামনে আসবে বলে মনে হচ্ছে), আমি এরকম কিছু করছি:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
এই রূপান্তরগুলির সাথে সহায়তা করার জন্য এটি করার আরও ভাল উপায় বা স্ট্যান্ডার্ড গ্রন্থাগার রয়েছে? কোডের 4 টি অতিরিক্ত লাইন লিখতে যখনই আমি কোনও ফাংশনটি কল করতে চাইছি তবে এটি উদাহরণস্বরূপ অন্তর বা স্ট্রিংয়ের একটি তালিকা নিতে পারে বলে একধরনের নির্বোধ মনে হয়।