Go-তে একটি অ্যাপ্লিকেশন প্যাকেজে সাজানো হয়। একটি প্যাকেজ হলো একই ফোল্ডারে থাকা সোর্স ফাইলের সমষ্টি। একটি ফোল্ডারের সব সোর্স ফাইলের ক্ষেত্রে ফাইলের একেবারে শুরুতে একই প্যাকেজ নাম থাকতে হবে। প্রচলিত রীতি অনুযায়ী, প্যাকেজের নাম রাখা হয় সেটি যে ফোল্ডারে আছে তার নামের মতোই।
package greeting
Go-তে রয়েছে বিস্তৃত স্ট্যান্ডার্ড লাইব্রেরি, যার প্যাকেজগুলো আপনি import কিওয়ার্ড ব্যবহার করে নিজের প্রোগ্রামে ব্যবহার করতে পারেন।
স্ট্যান্ডার্ড লাইব্রেরির প্যাকেজগুলো তাদের নাম দিয়েই ইমপোর্ট করা হয়।
package greeting
import "fmt"
একসাথে একাধিক প্যাকেজ ইমপোর্ট করা যায়, সেগুলোকে বন্ধনীর ভেতরে লিখে।
package greeting
import (
"errors"
"fmt"
)
তৃতীয় পক্ষের প্যাকেজ ইমপোর্ট করা হয় প্যাকেজটি যে ঠিকানায় রয়েছে সেই URL দিয়ে। ইমপোর্ট করার সময় একটি প্যাকেজকে অ্যালিয়াস দেওয়া যায়। এভাবে প্যাকেজ নামের সংঘর্ষ এড়ানো যায়:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
এরপর ইমপোর্ট করা প্যাকেজটি ব্যবহার করা হয় তার প্যাকেজ নাম বা অ্যালিয়াস দিয়ে:
// using the internal errors package
errors.New("Connection not established")
// using the errors package located at github.com/pkg/errors by alias
errs.New("Connection not established")
অন্য প্যাকেজের কোড থেকে কোনো কিছু কল করা যাবে কি না, তা Go ঠিক করে সেটি কীভাবে ডিক্লেয়ার করা হয়েছে তা দেখে।
কোনো ফাংশন, টাইপ, ভ্যারিয়েবল বা কনস্ট্যান্টকে বাইরে থেকে দৃশ্যমান করতে (যাকে বলা হয় exported) নামটি অবশ্যই বড় হাতের অক্ষর দিয়ে শুরু হতে হবে।
এটি অন্য প্রোগ্রামিং ভাষার মতোই, যেমন Java, যেগুলোতে public ও private-এর মতো অ্যাক্সেস মডিফায়ার ব্যবহৃত হয়।
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
}
একই কথা প্রযোজ্য নিজে তৈরি করা struct টাইপের ফিল্ডের নামের ক্ষেত্রেও। বড় হাতের অক্ষর দিয়ে শুরু হওয়া ফিল্ডের নাম বাইরে থেকে দৃশ্যমান, আর ছোট হাতের অক্ষর দিয়ে শুরু হওয়াগুলো নয়।