Пакеты

В Go все программы состоят из пакетов. Пакеты выполняют роль неймспейсов и используются для группировки функций. Например, в предыдущем уроке мы использовали функцию Print из пакета fmt:

fmt.Print("Hello, World!")

Если вы пишете исполняемую программу (не библиотеку), то вам обязательно нужно определить пакет main и функцию main() в нем, которая будет являться точкой входа в программу.

package main

func main() {
  // Здесь будет код, который будет исполняться при запуске программы
}

Пакет может состоять из одного или нескольких файлов с расширением .go. Пакеты определяются с помощью ключевого слова package в начале каждого файла пакета:

// Название должно быть коротким и простым
// Пишется в нижнем регистре без подчеркиваний
// Как правило, это просто существительные
package solution
// Здесь описывается содержимое пакета

Пакет располагается всегда внутри какой-то директории. Одна директория может содержать только один пакет. В Go принято такое соглашение, что имя пакета совпадает с последним элементом пути импорта.

Например, для пакета solution может быть такая структура директорий hexlet/solution и данный пакет будет импортироваться следующий образом:

import "hexlet/solution"

Если в программе используется несколько пакетов, то принято импортировать их сгруппировав следующим образом:

import (
  "fmt"
  "hexlet/solution"
)

Когда вы импортируете пакет, то можете ссылаться только на его экспортируемые имена. Любые не экспортированные имена недоступны за пределами пакета.

В Go имя экспортируется, если оно начинается с заглавной буквы. Например, Hello это экспортируемое имя, в то время как hello не начинаются с заглавной буквы, поэтому оно не экспортируется.

package solution

import "fmt"

// экспортируемая функция, может вызываться из других пакетов
func Hello() {
  hello()
}

// неэкспортируемая функция, может вызываться только внутри данного пакета
func hello() {
  fmt.Print("Hello, World!")
}

Задание

Определите пакет solution и поместите в него функцию Hello(), которая выводит на экран строчку “Hello, World!”. Помните, что функция должна быть экспортируемой, чтобы ее можно было вызвать из другого пакета.


Советы


Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт.