Как работает модульный код в Go?

Не имея опыта работы с C/компилированными языками, я нахожу трудным разобраться в использовании пакетного механизма Go для создания модульного кода.

На Python, чтобы импортировать модуль и получить доступ к его функциям и тому подобное, это простой случай

import foo

, где foo.py - это имя модуля, который вы хотите импортировать в том же каталоге. Иначе вы можете добавить пустую __init__.py в подпапку и получить доступ к модулям через

from subfolder import foo

Вы можете получить доступ к функциям, просто обратившись к ним через имя модуля, например, y = foo.bar(y). Это позволяет легко отделить логические фрагменты кода друг от друга.


В Go, однако, вы указываете имя пакета в самом файле исходного кода, например,

package foo

в верхней части модуля 'foo', который вы можете затем предположительно импортировать через

import (
        "foo"
              )

и затем ссылаться на него через него, т.е. y := foo.bar(x) . Но что я не могу обвести вокруг пальца, так это то, как это работает на практике. Соответствующие документы на golang.org кажутся немногословными и ориентированы на людей с большим (любым) опытом использования makefiles и компиляторов.

Кто-нибудь может объяснить, пожалуйста, как вы собираетесь модулировать свой код в Go, правильную структуру проекта для этого, и как работает компиляция?

11
задан Flimzy 1 December 2015 в 18:27
поделиться