Проблемы отладки с -X ldflag - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть программа go, подобная этой:

package main

import "fmt"

var version string

func main() {
    fmt.Printf("Version %s\n", version)
}

Я хотел бы изменить значение версии во время компиляции, как показано здесь , поэтому я собираю его таким образом (wtf.go находится в src / wtf ):

go build -ldflags "-X wtf/main.version=1.0.0.1234" wtf
go install wtf

Но когда я запускаю, версия - пустая строка.

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

Есть ли способ узнать, какую переменную go пытается изменить, чтобы устранить эту проблему?

Я использую Go v 1.10.3 для Windows / amd64.

1 Ответ

0 голосов
/ 07 ноября 2018

Ошибка в том, что вы должны указать пакет по пути импорта, а не по отношению к папке src. Поэтому просто обратитесь к вашей переменной version, например main.version. Подробнее см. Как установить переменную пакета с помощью -ldflags -X в сборке Golang .

Итак, перейдите к %GOPATH%/src/wtf и создайте его с помощью следующей команды:

go build -ldflags "-X main.version=1.0.0.1234" wtf.go

(Или, если у вас нет исходных файлов с другими пакетами в папке src/wtf, вы можете не указывать имя исходного файла.)

Это поместит wtf.exe в текущую папку. Запустив его, вы получите:

Version 1.0.0.1234

Обратите внимание, что go install не требуется. Это создаст ваше приложение и поместит исполняемый двоичный файл в %GOPATH%/bin, но у него не будет установлен version!

Если вы хотите использовать go install, вы снова должны предоставить флаги. Выполните следующую команду в папке %GOPATH%/src/wtf:

go install -ldflags "-X main.version=1.0.0.1234"

Также обратите внимание, что go install не требует, чтобы вы запускали go build до, и вам не нужно запускать go install после go build. Подробнее см. Что такое сборка сборки?

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