Путаница в создании файлов

#package #go

#пакет #Вперед

Вопрос:

Я пишу пакет Go, назовем его coolstuff. Я хочу включить файл example.go, который запускает примеры из coolstuff API. Но Makefile по умолчанию не будет создавать пакет coolstuff и example.go, жалуясь:

 example.go:1: package main; expected coolstuff
example.go:3: can't find import: coolstuff
  

Как я могу а) скомпилировать пакет, б) установить пакет, чтобы любой будущий код, который я напишу, знал, как найти coolstuff, и в) создать example.go, который зависит от coolstuff?

Нужны ли мне два файла Makefile, один для пакета и один для example.go?

Ответ №1:

Это можно сделать несколькими способами.

1) Это не совсем то, что вы описали, но можно добавить вызываемый файл example_test.go в ваш пакет coolstuff. Если вы просто установите свой пакет, этот файл будет проигнорирован, однако, когда вы выполняете gotest внутри своего пакета coolstuff, gotest автоматически соберет ваш пакет, включая все *_test.go файлы, и запустит их. На мой взгляд, это самый простой способ, поскольку вам не нужно иметь дело с несколькими пакетами, и вы также можете предоставить множество независимых примеров / тестовых примеров. Будущие версии go смогут добавлять эти примеры в вашу документацию godoc pkg.

2) Если вы чувствуете себя некомфортно при использовании Makefiles, возможно, вам стоит подробнее ознакомиться с goinstall. Вы можете установить переменную GOPATH среды для определения собственного каталога проекта. Пример структуры каталогов, подходящей для goinstall, приведен внизу страницы. («bar» похож на ваш «coolstuff pkg, а «qux» может быть вашим «примером»). goinstall автоматически определит все эти зависимости сборки для вас.

3) Также возможно использование Makefiles. Создание двух из них, одного, основанного на Make.pkg для вашего каталога пакетов coolstuff, и другого, основанного на Make.cmd для вашего примера каталога, звучит как хорошая идея. Вы можете найти несколько примеров go Makefile здесь .

Комментарии:

1. Я думаю, что я просто создам каталог исключительно для примера.go и его Makefile.