Могу ли я получить правильную версию и информацию о сборке при выполнении «go get path / to / myapp»? - PullRequest
0 голосов
/ 06 января 2020

Мне нужно указать номер версии в выводе, сгенерированном приложением Go. Для выпусков и локальных сборок я использую Makefile, который имеет:

...
VERSION = $(shell git describe --tags)
VER = $(shell git describe --tags --abbrev=0)
DATE = $(shell date -u '+%Y-%m-%d_%H:%M:%S%Z')
...
FLAGS_LD=-ldflags "-X path/to/myapp/mypkg.Build=${DATE} \
                  -X path/to/myapp/mypkg.Version=${VERSION}"
...
GOCMD = go
GOBUILD = $(GOCMD) build $(FLAGS_LD)
GOINSTALL = $(GOCMD) install $(FLAGS_LD)
...

И в пакете у меня есть переменные как

package mypkg

var (
    Version = "v0.11.0-dev"
    Build   string
)

Все хорошо, когда я запускаю сборку, установку или выпуск через make , но если я запускаю go get path/to/myapp, то -ldflags будут пустыми, и пользователь получит устаревшую информацию о версии, а не информацию о сборке.

Есть ли способ получить правильные данные ldflags при установке программы с go get?

Ответы [ 2 ]

1 голос
/ 06 января 2020

Нет, вы не можете читать / записывать ldflags при загрузке источников

go get предназначен для установки из источников.

Есть ли способ получить правильные данные ldflags при установке программа с go get?

Текущий ответ - нет.

Да, вы можете предоставить своим пользователям версию вашего пакета

Самый простой способ добиться того, что вы хотите сделать, можно либо:

  1. Если вы хотите поделиться - это lib (код многократного использования), добавьте теги git в исходное хранилище, чтобы ваши разработчики могли использовать его для управления версиями пакетов. (glide, go .mod, dep, ...).

  2. Если вы хотите поделиться - это программа (предназначенная для компиляции и выполнения только), изменяйте значение Version каждый раз при создании новой версии. Вы можете выполнить это автоматически очень легко с помощью комбинации git-hooks и sed.

1 голос
/ 06 января 2020

Есть ли способ получить правильные данные ldflags при установке программы с go get?

Нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...