У 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: назви полів, що починаються з великої літери, є доступними ззовні, а ті, що починаються з малої літери, ні.