উদাহরণ 1: গোলং খালি ইন্টারফেস
খালি ইন্টারফেস দিয়ে শুরু করুন{} যা গো-তে ইন্টারফেস হিসাবে উল্লেখ করা হয়। এটি এমন একটি প্রকারকে নির্দেশ করে যা যেকোনো ধরনের মান সঞ্চয় করতে পারে। গো-তে খালি ইন্টারফেসের জন্য সোর্স কোড নিচে দেওয়া হল:
প্যাকেজ প্রধানআমদানি 'fmt'
প্রকার মার্কস ক্যালকুলেটর ইন্টারফেস {}
ফাংশন প্রধান () {
ছিল m মার্কস ক্যালকুলেটর
fmt . Println ( মি )
}
এখানে, আমরা কোড প্রদান করি যেখানে 'মার্কসক্যালকুলেটর' ইন্টারফেসে কোনো নির্দিষ্ট পদ্ধতির স্বাক্ষর নেই কারণ এটি খালি। ফলস্বরূপ, এটি কোন কার্যকারিতা প্রদান করে না। এর পরে, আমাদের এই খালি ইন্টারফেসের প্রধান() ফাংশন রয়েছে যেখানে MarksCalculator টাইপের একটি পরিবর্তনশীল “m” ঘোষণা করা হয়েছে। যেহেতু ইন্টারফেস খালি, 'm' যেকোন প্রকারের যেকোনো মান ধরে রাখতে পারে। এই ক্ষেত্রে, 'm' অপ্রচলিত, তাই এটির প্রকারের জন্য একটি শূন্য মান রয়েছে যা ইন্টারফেসের জন্য 'শূন্য'। যখন 'm' প্রিন্ট করা হয় 'fmt.Println' ব্যবহার করে এটি কনসোলে 'nil' আউটপুট করে।
যে আউটপুটটি পুনরুদ্ধার করা হয়েছে তা হল 'nil' আগের সোর্স কোড থেকে প্রত্যাশিত:
উদাহরণ 2: ইন্টারফেসের গোলং বাস্তবায়ন
এই বিভাগটি গোলং ইন্টারফেসের বাস্তবায়ন প্রদর্শন করে। একটি টাইপকে অবশ্যই একটি ইন্টারফেসে নির্দিষ্ট পদ্ধতির প্রতিটির বাস্তবায়নের প্রস্তাব দিতে হবে যাতে এটি Go-তে প্রয়োগ করা যায়। ইন্টারফেস বাস্তবায়নের জন্য সোর্স কোড দেওয়া হল:
প্যাকেজ প্রধান
আমদানি (
'fmt'
)
প্রকার স্বরধ্বনি ইন্টারফেস {
সার্চ ভোয়েলস () [] রুন
}
প্রকার MyStr স্ট্রিং
ফাংশন ( + MyStr ) সার্চ ভোয়েলস () [] রুন {
ছিল স্বরবর্ণ [] রুন
জন্য _ , রুন := পরিসীমা সেন্ট {
যদি রুন == 'ক' || রুন == 'এইটা' || রুন == 'আমি' || রুন == 'ও' || রুন == 'ভিতরে' {
স্বরবর্ণ = সংযোজন ( স্বরবর্ণ , রুন )
}
}
ফিরে স্বরবর্ণ
}
ফাংশন প্রধান () {
নিউস্ট্রিং := MyStr ( 'গোল্যাং ইন্টারফেস' )
ছিল v1 স্বরবর্ণ
v1 = নিউস্ট্রিং
fmt . Printf ( 'স্বর হল %c' , v1 . সার্চ ভোয়েলস ())
}
এখানে, কোডটি 'স্বর' নামে একটি ইন্টারফেসকে সংজ্ঞায়িত করে যা একটি একক পদ্ধতি SearchVowels() নির্দিষ্ট করে যা রুনের (টাইপ int32) একটি স্লাইস প্রদান করে। একটি ইন্টারফেস ইন্টারফেস প্রকারের একটি ভেরিয়েবলে বরাদ্দ করার জন্য এই পদ্ধতি স্বাক্ষরকে প্রয়োগ করে এমন যেকোনো প্রকারকে সক্ষম করে। তারপরে, একটি নতুন 'MyStr' টাইপ ঘোষণা করা হয় যা অন্তর্নিহিত টাইপ স্ট্রিংয়ের জন্য একটি উপনাম। এর মানে হল যে 'MyStr' স্ট্রিংয়ের সমস্ত পদ্ধতির উত্তরাধিকারী কিন্তু একটি স্বতন্ত্র প্রকার।
এর পরে, আমরা “MyStr” টাইপের জন্য SearchVowels() পদ্ধতি প্রয়োগ করি। এই পদ্ধতিটি অক্ষর অনুসারে ইনপুট স্ট্রিং অক্ষর স্ক্যান করে এবং প্রতিটি অক্ষর একটি স্বরবর্ণ কিনা তা পরীক্ষা করে (“a”, “e”, “i”, “o”, বা “u”)। একটি অক্ষর একটি স্বরবর্ণ হলে, এটি স্বর স্লাইস সংযুক্ত করা হয়.
main() ফাংশনের ভিতরে, 'MyStr' টাইপের একটি 'NewString' ভেরিয়েবল 'GoLang Interfaces' মান দিয়ে তৈরি করা হয়েছে। এরপর, 'স্বর' টাইপের একটি 'v1' ভেরিয়েবল ঘোষণা করা হয়। যেহেতু 'MyStr' SearchVowels() পদ্ধতি প্রয়োগ করে যা 'Vowels' ইন্টারফেসে সংজ্ঞায়িত করা হয়েছে, তাই 'NewString' কে 'v1' এ বরাদ্দ করা যেতে পারে।
আউটপুট স্বরগুলির সমস্ত অ্যারে প্রদর্শন করে যা নির্দিষ্ট স্ট্রিংটিতে পাওয়া যায়:
উদাহরণ 3: গোলং স্ট্রিংগার ইন্টারফেস
উপরন্তু, Golang এর 'fmt' প্যাকেজে পূর্বনির্ধারিত 'স্ট্রিংগার' ইন্টারফেস রয়েছে। এটি একটি কাস্টম টাইপকে তার স্ট্রিং উপস্থাপনা নিয়ন্ত্রণ করতে দেয় যখন 'fmt' প্যাকেজের প্রিন্টিং ফাংশনে '%v' ক্রিয়া দিয়ে ফর্ম্যাট করা হয়। Go এর স্ট্রিংগার ইন্টারফেসের উদাহরণ কোড নিচে দেওয়া হল:
প্যাকেজ প্রধানআমদানি (
'fmt'
)
প্রকার ছাত্র গঠন {
নাম স্ট্রিং
ডিগ্রী স্ট্রিং
}
ফাংশন ( s ছাত্র ) স্ট্রিং () স্ট্রিং {
ফিরে fmt . স্প্রিন্টফ ( '%s হল a(n) %s' , s . নাম , s . ডিগ্রী )
}
ফাংশন প্রধান () {
s1 := ছাত্র { 'এলেনা গিলবার্ট' , 'কম্পিউটার বিজ্ঞান' }
s2 := ছাত্র { 'ক্যারোলিন ক্যান্ডিস' , 'বিবিএ' }
fmt . Println ( s1 )
fmt . Println ( s2 )
}
এখানে, কোডটি প্রথমে প্রয়োজনীয় প্যাকেজ আমদানি করে যা 'fmt' কনসোলে প্রিন্ট করার জন্য। তারপর, আমরা দুটি ক্ষেত্র সহ একটি struct টাইপ 'স্টুডেন্ট' সংজ্ঞায়িত করি: 'নাম' এবং 'ডিগ্রী'। এই কাঠামোটি একজন শিক্ষার্থীর তথ্য উপস্থাপন করে। আরও, 'ছাত্র' টাইপের জন্য একটি স্ট্রিং() পদ্ধতি তৈরি করা হয়েছে। এই পদ্ধতিতে 'ছাত্র' টাইপের একটি রিসিভার রয়েছে এবং একটি স্ট্রিং প্রদান করে। “স্ট্রিং()” পদ্ধতি হল গো-তে একটি বিশেষ পদ্ধতি যা প্রিন্ট করার সময় কোনো বস্তুর স্ট্রিং উপস্থাপনা কাস্টমাইজ করতে ব্যবহৃত হয়। এই ক্ষেত্রে, 'স্ট্রিং()' পদ্ধতি ফরম্যাট করে এবং একটি স্ট্রিং প্রদান করে যাতে শিক্ষার্থীর নাম এবং ডিগ্রি অন্তর্ভুক্ত থাকে।
এর পরে, আমাদের প্রধান() ফাংশন রয়েছে যেখানে 'ছাত্র' টাইপের দুটি ভেরিয়েবল, s1 এবং s2, ছাত্রদের তথ্যের সাথে ঘোষণা এবং শুরু করা হয়। সবশেষে, কোডটি s1 এবং s2 এর মান প্রিন্ট করতে fmt.Println() ফাংশন ব্যবহার করে। যেহেতু স্ট্রিং() পদ্ধতিটি 'স্টুডেন্ট' টাইপের জন্য সংজ্ঞায়িত করা হয়েছে, তাই 'স্টুডেন্ট' অবজেক্ট প্রিন্ট করার সময় Go স্বয়ংক্রিয়ভাবে এই পদ্ধতিটিকে কল করে। String() পদ্ধতি 'fmt.Sprintf()' ফাংশন ব্যবহার করে শিক্ষার্থীর তথ্য ফরম্যাট করে এবং ফরম্যাট করা স্ট্রিং ফেরত দেয়।
নিম্নলিখিত আউটপুট স্ট্রিংগার ইন্টারফেসের 'ছাত্র' ধরণের অবজেক্টটি প্রিন্ট করে:
উদাহরণ 4: গোলং টাইপ সুইচ ইন্টারফেস
তারপর Go এর টাইপ সুইচ ইন্টারফেস আসে। একটি টাইপ সুইচ হল একটি কন্ট্রোল স্ট্রাকচার যা আমাদেরকে একটি ইন্টারফেসের মান ডায়নামিক টাইপ পরিদর্শন করতে দেয়। টাইপ সুইচ ইন্টারফেসের সোর্স কোড অনুসরণ করুন:
প্যাকেজ প্রধানআমদানি 'fmt
func MyFunction(F1 ইন্টারফেস{}) {
সুইচ F1.(টাইপ) {
কেস int:
fmt. Println(' টাইপ : int , মান : ', F1.(আপনি))
কেস স্ট্রিং:
fmt. Println(' \nটাইপ করুন : স্ট্রিং , মান : ', F1.(স্ট্রিং))
কেস float64:
fmt. Println(' \nটাইপ করুন : float64 , মান : ', F1.(float64))
ডিফল্ট:
fmt. Println(' \nপ্রকারটি বৈধ নয় ')
}
}
func main() {
মাই ফাংশন(' গোলং ইন্টারফেস টিউটোরিয়াল ')
মাই ফাংশন(89.7)
MyFunction(সত্য)
}
এখানে, প্রদত্ত কোড একটি 'MyFunction' ফাংশনকে সংজ্ঞায়িত করে যা 'ইন্টারফেস{}' টাইপের একটি 'F1' প্যারামিটার নেয়। এটি নির্দেশ করে যে 'F1' যেকোনো ধরনের মান গ্রহণ করতে পারে। ফাংশনের ভিতরে, একটি সুইচ স্টেটমেন্ট ব্যবহার করা হয় 'F1.(type)' এর সাথে 'MyFunction'-এ পাস করা মানটির ধরন পরীক্ষা করতে। একটি ইন্টারফেস মান অন্তর্নিহিত গতিশীল ধরনের পেতে একটি টাইপ সুইচ-এ '.(টাইপ)' সিনট্যাক্স ব্যবহার করা হয়। উল্লেখ্য যে এখানে সুইচ কেস তিনটি নির্দিষ্ট ধরনের পরিচালনা করে: “int”, “স্ট্রিং” এবং “float64”। যদি 'F1' টাইপ এই ক্ষেত্রেগুলির একটির সাথে মিলে যায়। এটি টাইপ অ্যাসারশন (F1.(int), F1.(স্ট্রিং), F1.(float64)) ব্যবহার করে সংশ্লিষ্ট প্রকার এবং মান প্রিন্ট করে। যদি 'F1' টাইপটি সংজ্ঞায়িত ক্ষেত্রের কোনোটির সাথে মেলে না, তাহলে ডিফল্ট কেসটি কার্যকর করা হয় যা 'Type is not valid' প্রিন্ট করে।
তারপরে, main() ফাংশনের মধ্যে, 'MyFunction' কে বিভিন্ন মান সহ তিনবার বলা হয়: একটি স্ট্রিং, একটি float64 এবং একটি বুলিয়ান (যা সুইচ স্টেটমেন্টে পরিচালনা করা হয় না)।
আউটপুট টাইপ দাবী সহ সুইচ ইন্টারফেসের প্রদর্শন প্রদর্শন করে:
উদাহরণ 5: গোলং একাধিক ইন্টারফেস
অধিকন্তু, Go একাধিক ইন্টারফেস অফার করে যা এটিকে প্রেক্ষাপটের উপর নির্ভর করে বিভিন্ন সেট আচরণ প্রদান করতে দেয়। এই বৈশিষ্ট্যটিকে 'মাল্টিপল ইন্টারফেস' বা 'ইন্টারফেস কম্পোজিশন' বলা হয়। নিম্নলিখিত কোড একাধিক ইন্টারফেস বাস্তবায়ন প্রদর্শন করে:
প্যাকেজ প্রধানআমদানি 'fmt'
টাইপ পাখি ইন্টারফেস {
শ্বাস ফেলা ()
মাছি ()
}
টাইপ এভিয়ান ইন্টারফেস {
খাওয়ানো ()
}
টাইপ কোথায় গঠন {
বয়স int
}
ফাংশন ( d কোথায় ) শ্বাস ফেলা () {
fmt . Println ( 'ঘুঘু শ্বাস নেয়' )
}
ফাংশন ( d কোথায় ) মাছি () {
fmt . Println ( 'ঘুঘু মাছি' )
}
ফাংশন ( d কোথায় ) খাওয়ানো () {
fmt . Println ( 'ঘুঘু বাচ্চাদের লালনপালন করে' )
}
ফাংশন প্রধান () {
ছিল b পাখি
d := কোথায় {}
খ = d
খ . শ্বাস ফেলা ()
খ . মাছি ()
ছিল একটি এভিয়ান
ক = d
ক . খাওয়ানো ()
}
এখানে, আমরা দুটি ইন্টারফেস সংজ্ঞায়িত করি: 'পাখি' এবং 'এভিয়ান'। 'পাখি' ইন্টারফেস দুটি পদ্ধতি ঘোষণা করে: breathe() এবং fly()। যখন “এভিয়ান” ইন্টারফেস ফিড() পদ্ধতি ঘোষণা করে। তারপর, 'ঘুঘু' কাঠামোটি 'পাখি' এবং 'এভিয়ান' উভয় ইন্টারফেসের সমস্ত পদ্ধতি প্রয়োগ করে। এটি breathe(), fly(), এবং feed() এর বাস্তবায়ন প্রদান করে।
এর পরে, আমরা main() ফাংশনের মধ্যে 'পাখি' টাইপের পরিবর্তনশীল 'b' ঘোষণা করি। একটি 'ঘুঘু' এর একটি উদাহরণ তৈরি করা হয় এবং b = d অ্যাসাইনমেন্ট ব্যবহার করে 'b' কে বরাদ্দ করা হয়। যেহেতু 'ঘুঘু' 'পাখি' ইন্টারফেসের সমস্ত পদ্ধতি প্রয়োগ করে, এই অ্যাসাইনমেন্টটি বৈধ।
তারপর, Breathe() এবং fly() পদ্ধতিগুলিকে 'b'-এ বলা হয় যা 'পাখি' টাইপের। একইভাবে, 'এভিয়ান' টাইপের একটি পরিবর্তনশীল 'a' ঘোষণা করা হয় এবং 'd' এর 'ঘুঘু' উদাহরণের সাথে বরাদ্দ করা হয়। যেহেতু 'ঘুঘু' ফিড() পদ্ধতি প্রয়োগ করে যা 'এভিয়ান' ইন্টারফেসে সংজ্ঞায়িত করা হয়েছে, তাই এই অ্যাসাইনমেন্টটিও বৈধ। ফিড() পদ্ধতিটিকে 'a' বলা হয় যা 'এভিয়ান' টাইপের। যেহেতু 'a' ধারণ করে 'dove' উদাহরণ, feed() পদ্ধতি যা 'dove' দ্বারা প্রয়োগ করা হয় তা কার্যকর করা হয়।
আউটপুট দেখায় যে ইন্টারফেসের পদ্ধতিগুলি সঠিকভাবে কার্যকর করা হয়েছে:
উপসংহার
আমরা Go ইন্টারফেসের মৌলিক বিষয়গুলো শিখেছি এবং সেগুলোর ব্যবহার বোঝাতে ব্যবহারিক উদাহরণ দিয়েছি। ইন্টারফেসগুলিকে সংজ্ঞায়িত করে এবং বিভিন্ন প্রকারের সাথে প্রয়োগ করে, আমরা নমনীয় এবং এক্সটেনসিবল প্রোগ্রাম তৈরি করতে পারি।