Как пакеты с несколькими файлами работают в golang?
этой РЕПО имеет 3 go файлы все начинаются с "пакет пиломатериалов".
Чтобы использовать этот пакет, я должен положить это в мой GOROOT
и просто
import lumber
в моей программе. Как переменные и типы в этом пакете соединяются друг с другом в нескольких файлах? Как компилятор go знает, какой файл начать читать первым?
в случае, если я хочу прочитать пакет, где я должен начать читать, чтобы понять пакете? Что именно поток вещи здесь?
2 ответов
Нет, ты не "должен положить это в мой GOROOT". Ты должен казнить
$ go get github.com/jcelliott/lumber
, который будет клонировать репозиторий в $GOPATH/src/github.com/jcelliott/lumber
. Затем вы можете использовать пакет, импортировав его в свой код как
import "github.com/jcelliott/lumber"
о правила поиска: объявления и область применения
подробнее об ответе jnml:
при использовании import "foo/bar"
в вашем коде вы не ссылаетесь на исходные файлы (которые будут расположены в $GOPATH/src/foo/bar/
).
вместо этого вы ссылаетесь на скомпилированный файл пакета в $GOPATH/pkg/$GOOS_$GOARCH/foo/bar.a
. Когда вы создаете свой собственный код, и компилятор обнаруживает, что foo/bar
пакет еще не был скомпилирован (или устарел), он сделает это для вас автоматически.
он делает это, сопоставляя* все соответствующие исходные файлы в the $GOPATH/src/foo/bar
каталог и построение их в один bar.a
файл, который он устанавливает в каталоге pkg. Затем компиляция возобновляется с помощью вашей собственной программы.
этот процесс повторяется для всех импортированных пакетов и пакетов, импортируемых этими пакетами, а также на всем пути вниз по цепочке зависимостей.
*) как файлы сопоставляются, зависит от того, как сам файл называется и какие теги сборки присутствуют внутри него.
для более глубокого понимания того, как это работает, обратитесь к build docs.