Как пакеты с несколькими файлами работают в 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.