Рекомендации по Makefile для проектов Go

Go
Рекомендации по Makefile для проектов Go

Всем привет, меня зовут Се Вэй, я бэкенд-разработчик, использующий язык Go.

Тема этой статьи: Рекомендации по написанию Makefiles для проектов Go.

1. Обязательное условие:

  • будет использовать Makefile
  • Пишите проекты на Go

В процессе написания проекта часто бывает необходимо скомпилировать и выполнить файлы, чтобы проверить правильность разработанных или исправленных ошибок. Вы можете, конечно, выполнить напрямуюgo buildкоманда для компиляции, выполненияgo run

команда для выполнения.

При написании проекта Go часто выполняются такие команды, как тестирование, проверка формата, загрузка и установка библиотеки.

Конечно, вы также можете написать сценарии оболочки для выполнения этих команд, что еще больше упрощает работу.

На самом деле есть лучший вариант, makefile. Makefiles часто видят во многих проектах с открытым исходным кодом. Когда файлы в вашем проекте изменяются, вы можете использовать makefile для выполнения команд для автоматической сборки

2. Синтаксис make-файла

PROJECT="example"

default:
    echo ${PROJECT}

install:
    @govendor sync -v
    
test: install
    @go test ./...

.PHONY: default install test


Выше приведен очень простой файл Makefile, который можно запустить напрямую, написав эти команды.make , make install, make testДождитесь завершения соответствующей команды.

Введение формата:

<target> : <prerequisites> 
[tab]  <commands> 
  • target : пользовательская команда, которую вы хотите выполнить
  • предварительные условия: предварительные условия, то есть команды, выполняемые до выполнения целевой команды.
  • command : определенные команды для выполнения
  • директива .PHONY, встроенное ключевое слово
  • Без параметров первая цель выполняется по умолчанию
  • @ означает подавление эха, то есть терминал не будет печатать реальную выполняемую команду
  • #Указывает на примечание
  • ${val} представляет собой переменную, которая согласуется с объявлением и использованием переменных в сценариях оболочки.
  • Подстановочные знаки разрешены

3. Перейти к проекту

Встроенная поддержка в GogoКоманды, которые можно использовать для выполнения: тест, компиляция, запуск, проверка синтаксиса и другие команды

Какие команды часто выполняет хорошо продуманный проект Go?

  • пройти ветеринарную статическую проверку
  • go test запускает модульные тесты
  • перейти в формат fmt
  • иди компилируй
  • иди беги беги ...

Таким образом, Makefile для проекта Go также должен поддерживать эти команды.

  • сделать по умолчанию: скомпилировать
  • сделать fmt: формат
  • make vet: статическая проверка
  • сделать тест: запустить тест
  • make install: скачать зависимости
  • make clean: удалить скомпилированные двоичные файлы

Таким образом, общая схема может быть следующей:

BINARY="example"
VERSION=1.0.0
BUILD=`date +%FT%T%z`

PACKAGES=`go list ./... | grep -v /vendor/`
VETPACKAGES=`go list ./... | grep -v /vendor/ | grep -v /examples/`
GOFILES=`find . -name "*.go" -type f -not -path "./vendor/*"`

default:
	@go build -o ${BINARY} -tags=jsoniter

list:
	@echo ${PACKAGES}
	@echo ${VETPACKAGES}
	@echo ${GOFILES}

fmt:
	@gofmt -s -w ${GOFILES}

fmt-check:
	@diff=?(gofmt -s -d $(GOFILES)); \
	if [ -n "$$diff" ]; then \
		echo "Please run 'make fmt' and commit the result:"; \
		echo "$${diff}"; \
		exit 1; \
	fi;

install:
	@govendor sync -v

test:
	@go test -cpu=1,2,4 -v -tags integration ./...

vet:
	@go vet $(VETPACKAGES)

docker:
    @docker build -t wuxiaoxiaoshen/example:latest .

clean:
	@if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi

.PHONY: default fmt fmt-check install test vet docker clean


4. Дополнение

Инструмент сборки Makefile, который значительно упрощает создание проектов.

В реальной производственной среде необходимо использовать CI/CD (непрерывную интеграцию и непрерывное развертывание), поэтому Makefile обычно используется в сочетании с инструментами CI.

Например, только что объединенный код сначала запускает модульные тесты, статические проверки и т. д., а затем выполняет сценарий непрерывной интеграции. После успешного завершения строит образ, передает его на сервер и завершает полный набор процессов непрерывной интеграции и непрерывного развертывания. .

Makefiles обычно используются с travis.

Например:

language: go
go:
  - "1.11"
  - "1.11.x"
env:
  - GO111MODULE=on
notifications:
  email:
    recipients:
      - wuxiaoshen@shu.edu.cn
    on_success: change # default: change
    on_failure: always # default: always

before_install:
  - go test -cpu=1,2,4 -v -tags integration ./...
  - go vet $(go list ./... | grep -v /vendor/)

script:
  - make fmt
  - make fmt-check
  - make vet
  - make list  
  - go test -race  ./... -coverprofile=coverage.txt -covermode=atomic


Надеюсь вдохновить всех.

Ссылаться на: