Go-তে একটি অ্যাপ্লিকেশন প্যাকেজে সাজানো থাকে। একটি প্যাকেজ হলো একই ফোল্ডারে থাকা সোর্স ফাইলের সংগ্রহ। একটি ফোল্ডারের সব সোর্স ফাইলের শুরুতে একই প্যাকেজ নাম থাকতে হবে। প্রথা অনুযায়ী প্যাকেজের নাম রাখা হয় সেগুলো যে ফোল্ডারে থাকে সেই ফোল্ডারের নামের সঙ্গে মিলিয়ে।
package greeting
Go একটি বিস্তৃত স্ট্যান্ডার্ড লাইব্রেরি প্যাকেজ সরবরাহ করে, যা আপনি আপনার প্রোগ্রামে import কিওয়ার্ড ব্যবহার করে ব্যবহার করতে পারেন।
স্ট্যান্ডার্ড লাইব্রেরির প্যাকেজগুলো এগুলোর নাম ব্যবহার করে ইমপোর্ট করা হয়।
package greeting
import "fmt"
এরপর ইমপোর্ট করা একটি প্যাকেজকে প্যাকেজের নাম দিয়ে সম্বোধন করা হয়:
world := "World"
fmt.Sprintf("Hello %s", world)
Go নির্ধারণ করে কোনো একটি আইটেম অন্য প্যাকেজের কোড থেকে কল করা যাবে কি না, তা নির্ভর করে সেটি কীভাবে ডিক্লেয়ার করা হয়েছে তার উপর। একটি ফাংশন, টাইপ, ভ্যারিয়েবল, কনস্ট্যান্ট বা স্ট্রাক্ট ফিল্ডকে বাইরে থেকে দৃশ্যমান করতে (যাকে এক্সপোর্টেড বলা হয়) নামটি অবশ্যই বড় হাতের অক্ষর দিয়ে শুরু হতে হবে।
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
Go একটি বিল্ট-ইন প্যাকেজ সরবরাহ করে যার নাম fmt (ফরম্যাট প্যাকেজ), যা ইনপুট ও আউটপুটের ফরম্যাট নিয়ন্ত্রণ করার জন্য নানা রকম ফাংশন দেয়।
সবচেয়ে বেশি ব্যবহৃত ফাংশনটি হলো Sprintf, যা %s-এর মতো ভার্ব ব্যবহার করে একটি স্ট্রিংয়ের ভেতরে মান বসায় এবং সেই স্ট্রিং রিটার্ন করে।
import "fmt"
food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco
Go-তে ফ্লোটিং পয়েন্ট মানগুলো Sprintf-এর ভার্ব দিয়ে সুবিধাজনকভাবে ফরম্যাট করা হয়: %g (কম্প্যাক্ট রিপ্রেজেন্টেশন), %e (এক্সপোনেন্ট) অথবা %f (নন-এক্সপোনেন্ট)।
তিনটি ভার্বই ফিল্ডের প্রস্থ এবং সংখ্যার অবস্থান নিয়ন্ত্রণ করার সুযোগ দেয়।
import "fmt"
number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32
উপলব্ধ ভার্বগুলোর সম্পূর্ণ তালিকা পাবেন ফরম্যাট প্যাকেজের ডকুমেন্টেশনে।
fmt-এ স্ট্রিং নিয়ে কাজ করার আরও ফাংশন আছে, যেমন Println, যা শুধু তার পাওয়া আর্গুমেন্টগুলো কনসোলে প্রিন্ট করে, এবং Printf, যা প্রিন্ট করার আগে Sprintf-এর মতোই ইনপুট ফরম্যাট করে।
একদা এক খামখেয়ালি প্রোগ্রামার থাকতেন একটি অদ্ভুত বাড়িতে, যার জানালায় ছিল লোহার গ্রিল। একদিন তিনি একটি অনলাইন জব বোর্ড থেকে একটি পার্টি রোবট তৈরির কাজ নিলেন। রোবটটির কাজ ছিল মানুষকে স্বাগত জানানো এবং তাদের নিজ নিজ আসনে পৌঁছে দেওয়া। প্রথম সংস্করণটি ছিল খুবই টেকনিক্যাল, আর তাতে প্রোগ্রামারটির মানুষের সঙ্গে মেলামেশার অভাব স্পষ্ট ফুটে উঠেছিল। যার কিছুটা পরের সংস্করণেও ঢুকে পড়েছিল।
প্রদত্ত নামটি ব্যবহার করে একটি স্বাগত বার্তা রিটার্ন করার জন্য Welcome ফাংশনটি ইমপ্লিমেন্ট করুন:
Welcome("Christiane")
// => Welcome to my party, Christiane!
ব্যক্তিটির প্রদত্ত নাম ও বয়স ব্যবহার করে একটি জন্মদিনের বার্তা রিটার্ন করার জন্য HappyBirthday ফাংশনটি ইমপ্লিমেন্ট করুন। দুর্ভাগ্যবশত প্রোগ্রামারটি একটু নিজের বড়াই করতে ভালোবাসেন, তাই প্রতিটি অতিথির জন্মদিন সম্পর্কে নিজের জ্ঞান রোবটকে দেখাতে হয়।
HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!
পথনির্দেশ দেওয়ার জন্য AssignTable ফাংশনটি ইমপ্লিমেন্ট করুন। এটির ৫টি প্যারামিটার নেওয়া উচিত।
string)int)string)string)float64)ফলাফলের সঠিক ফরম্যাটটি নিচের উদাহরণে দেখা যাবে।
রোবট টেবিল নম্বরটি ৩ অঙ্কের ফরম্যাটে দেয়। সংখ্যাটি ৩ অঙ্কের কম হলে সেটি ৩ অঙ্কের হতে সামনে অতিরিক্ত শূন্য পায় (যেমন 3 থেকে 003 হয়)। রোবট টেবিলের দূরত্বও জানায়। ভাগ্যক্রমে তা মাত্র ১ অঙ্কের নির্ভুলতায় সীমাবদ্ধ।
AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।