Go এ, আপনি যদি কোনও নতুন ধরণের সংজ্ঞা দেন তবে:
type MyInt int
তারপরে MyInt
আপনি কোনও প্রকারের প্রত্যাশা বা কোনও বিপরীতে কোনও ফাংশনে পাস করতে পারবেন না :
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
ভাল। তবে কেন এটি একই সাথে ফাংশনগুলির ক্ষেত্রে প্রযোজ্য নয়? যেমন:
type MyFunc func(i int)
func (m MyFunc) Run(i int) {
m(i)
}
func run(f MyFunc, i int) {
f.Run(i)
}
func main() {
var newfunc func(int) //explicit declaration
newfunc = func(i int) {
fmt.Println(i)
}
run(newfunc, 10) //works just fine, even though types seem to differ
}
এখন, আমি অভিযোগ করছি না কারণ এটি আমাকে স্পষ্টভাবে newfunc
টাইপ করার জন্য কাস্ট করাতে বাঁচায় MyFunc
, যেমন আমাকে প্রথম উদাহরণে করতে হবে; এটি কেবল বেমানান বলে মনে হচ্ছে। আমি নিশ্চিত যে এর কোনও ভাল কারণ আছে; কেউ কি আমাকে আলোকিত করতে পারে?
আমার জিজ্ঞাসার কারণটি হ'ল মূলত কারণ আমি আমার পরিবর্তে দীর্ঘ কিছু ফাংশনের প্রকারগুলি ছোট করতে চাই, তবে আমি এটি নিশ্চিত করতে চাই যে এটি প্রত্যাশিত এবং এটি গ্রহণযোগ্য হবে :)
type
স্কালের চেয়ে গো-তে বরং বেশি কার্যকর। স্কালায় কেবল টাইপ এলিয়াস থাকে, হায়।