Ответ 1
Я бы, наверное, сделал это
src/
tar/
tar.go # tar libary
tar/
main.go # tar binary
Это даст вам двоичный код tar
и библиотеку с именем tar
Скажем, вы размещаете это на github, тогда вы хотите
src/
github.com/
you/
tar/
tar.go # tar libary
tar/
main.go # tar binary
Что бы вы дали двоичный код tar, когда вы делаете go get install github.com/you/tar/tar
и библиотеку под названием github.com/you/tar
, когда вы делаете go get install github.com/you/tar
В зависимости от того, что вы считаете более важным, вы можете обменять библиотеку и двоичный файл на
src/
github.com/
you/
tar/
main.go # tar binary
tar/
tar.go # tar libary
Сохранение всего кода в одном дереве позволяет вам сделать go install ./...
из корня для создания всех пакетов и подпакетов, что является преимуществом. go test|fmt ./...
. (Обратите внимание, что на самом деле это 3 точки!)