در Go، برنامهها به شکل «بسته» سازماندهی میشوند. یک بسته مجموعهای از فایلهای منبع است که در یک پوشهی یکسان قرار دارند. همهی فایلهای منبع در یک پوشه باید در بالای فایل اسم بستهی یکسانی داشته باشند. طبق قرارداد، اسم بستهها همان اسم پوشهای است که در آن قرار دارند.
package greeting
Go یک کتابخانهی استاندارد گسترده از بستهها ارائه میدهد که میتوانید با «کلیدواژه»ی import از آنها در برنامهتان استفاده کنید.
بستههای کتابخانهی استاندارد با اسمشان وارد میشوند.
package greeting
import "fmt"
میتوان چندین بسته را یکباره و با قرار دادن آنها داخل پرانتز وارد کرد.
package greeting
import (
"errors"
"fmt"
)
بستههای شخص ثالث با استفاده از آدرس محل قرارگیری بسته وارد میشوند. هنگام وارد کردن، میتوان به بسته یک اسم مستعار داد. این کار برای جلوگیری از تعارض اسم بستهها به کار میرود:
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 سفارشی هم برقرار است: اسم فیلدهایی که با حرف بزرگ شروع میشوند از بیرون قابل مشاهدهاند و آنهایی که با حرف کوچک شروع میشوند قابل مشاهده نیستند.