# README
go-musthave-shortener-tpl
Шаблон репозитория для трека «Сервис сокращения URL».
Начало работы
- Склонируйте репозиторий в любую подходящую директорию на вашем компьютере.
- В корне репозитория выполните команду
go mod init <name>
(где<name>
— адрес вашего репозитория на GitHub без префиксаhttps://
) для создания модуля.
Обновление шаблона
Чтобы иметь возможность получать обновления автотестов и других частей шаблона, выполните команду:
git remote add -m main template https://github.com/Yandex-Practicum/go-musthave-shortener-tpl.git
Для обновления кода автотестов выполните команду:
git fetch template && git checkout template/main .github
Затем добавьте полученные изменения в свой репозиторий.
Запуск автотестов
Для успешного запуска автотестов называйте ветки iter<number>
, где <number>
— порядковый номер инкремента. Например, в ветке с названием iter4
запустятся автотесты для инкрементов с первого по четвёртый.
При мёрже ветки с инкрементом в основную ветку main
будут запускаться все автотесты.
Подробнее про локальный и автоматический запуск читайте в README автотестов.
Разное в проекте
Запуск линтера
/Users/dmitrii/go/bin/golangci-lint run
Зависимости
Установит зависимости найденные в коде проекта
go mod tidy
Запуск тестов
go test -v cmd/shortener/main_test.go
Запуск с флагами
go run ./cmd/shortener/main.go -a 0.0.0.0:9999 -b http://localhost:9999
go run ./cmd/shortener/main.go -a 0.0.0.0:9999 -b http://localhost:9999 -d postgres://admin:password@localhost:6434/urlservice
go run ./cmd/shortener/main.go -c config.json
Форматирование кода
gofmt -s -w . -s simplifies the code -w writes results directly
/Users/dmitrii/go/bin/goimports -local "github.com/PerfectStepCoder/shorturl/cmd/shortener" -w main.go find . -name '*.go' | xargs /Users/dmitrii/go/bin/goimports -w -local
gofmt -l -s . goimports -l .
/Users/dmitrii/go/bin/goimports
Проверка стуктурных тегов
go vet -structtag
Тесты производительности
Бенчмарки
cd ./internal/tests/ go test --bench . go test -bench . -benchmem go test -bench=. -cpuprofile=./base.pprof запись профиля go tool pprof bench.test base.pprof анализ в консоле
Профилирование
go run ./cmd/shortener/main.go http://localhost:8080/debug/pprof/ Сравнение профилей: go tool pprof -top -diff_base=./base.pprof ./result.pprof
Документация
cd корень проекта /Users/dmitrii/go/bin/godoc -http=:8088 -goroot=.
go vet ./... # проверка всех файлов в текущей директории и поддиректориях
Ищет все файлы с тестами и выполняет их
go test ./... go test ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=./... go test ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=$(go list ./... | grep -v "/cmd/client" | grep -v "/cmd/staticlint") Посмотреть какой функционал не покрыт тестами: go tool cover -html=profile.cov
Пользовательский статический анализатор (запуск)
go run ./cmd/staticlint/main.go ./cmd/shortener
Выводим отчет о покрытие тестами кода
go test ./... -coverprofile=coverage.out go tool cover -html=cover.out -o coverage.html
Запуск сборки в флагами
go build -ldflags="-X 'main.buildVersion=1.0.0'"