37 Практика
Как разложить код по пакетам?
Ответ
Один каталог — один пакет. Имя пакета по соглашению совпадает с именем каталога и пишется коротким словом: user, а не userpkg. Каталог internal виден только родительскому дереву модуля, снаружи его импортировать нельзя.
Подробнее
Пакет собирают вокруг задачи, а не вокруг слоя «все модели» или «все утилиты». Маленький internal/web честнее, чем общий utils, в который стекается несвязанный код.
Цикл импорта запрещён. Если два пакета тянут друг друга, общий кусок выносят в третий.
package greet
import "fmt"
func Hello(name string) {
fmt.Println(hello(name))
}
func hello(name string) string {
return "привет, " + name
}