В компоновщике Go ( ссылка на инструмент go ) есть опция для установки значения неинициализированной строковой переменной:
-X importpath.name=value
Set the value of the string variable in importpath named name to
стоимость. Обратите внимание, что до Go 1.5 эта опция принимала два отдельных аргумента. Теперь требуется один аргумент, разделенный на первый знак =.
Как часть вашего процесса сборки, вы можете установить строковую переменную версии, используя это. Вы можете передать это через go
инструмент, используя -ldflags
. Например, дан следующий исходный файл:
package main
import "fmt"
var xyz string
func main() {
fmt.Println(xyz)
}
Затем:
$ go run -ldflags "-X main.xyz=abc" main.go
abc
Чтобы установить main.minversion
дату и время сборки при сборке:
go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go
Если вы скомпилируете без инициализации main.minversion
таким образом, он будет содержать пустую строку.
go bouild
вместоgo run
?go build -ldflags "-X main.minversion `date -u +.%Y%m%d%.H%M%S`" service.go
go build -ldflags "-X 'main.buildtime=$(date -u '+%Y-%m-%d %H:%M:%S')'"
go build -ldflags "-X pkg.version=123"
не будет работать во времяgo build -ldflags "-X path/to/pkg.version=123"
работы, как ожидалось. Надеюсь, поможет.Кроме того, я хотел бы опубликовать небольшой пример, как использовать git и make-файл:
Файл make создаст два исполняемых файла. Один выполняет функцию один, другой принимает функцию два в качестве основной записи:
Тогда просто запустите:
Ты получишь:
источник
У меня были проблемы с использованием этого
-ldflags
параметра при создании моего смешанного приложения командной строки и проекта библиотеки, поэтому я в конечном итоге использовал цель Makefile для создания исходного файла Go, содержащего версию моего приложения и дату сборки:В моем
init()
методе я делаю это:Однако если вы хотите получить атомарно увеличивающийся номер сборки вместо даты сборки, вам, вероятно, потребуется создать локальный файл, содержащий последний номер сборки. Ваш Makefile будет считывать содержимое файла в переменную, увеличивать его, вставлять в
version.go
файл вместо даты и записывать новый номер сборки обратно в файл.источник
Используйте
ldflags
для установки переменных вmain
пакете:С файлом
main.go
:Затем запустите:
Телосложение:
Используйте
ldflags
для установки переменной вnon-main
пакете:С файлом
config.go
:Вам также понадобится файл
main.go
:Сначала создайте свой бинарный файл:
Найдите полный путь к имени переменной, которую вы хотите установить:
Запустите и соберите двоичный файл снова, но с
ldflags
:Вдохновленный https://github.com/golang/go/wiki/GcToolchainTricks#incключ-build-information-in-the-executable
Также, если вы используете,
goreleaser
прочитайте это https://goreleaser.com/#using-the-main-version :Если вы хотите увидеть это в действии: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
источник
использовать мульти
-ldflags
:источник
На ОС Windows приведена программа ниже
Вы можете построить с помощью
Формат даты предполагает, что ваша среда
echo %date%
естьFri 07/22/2016
иecho %time%
есть16:21:52.88
Тогда вывод будет:
version=0.0.1, date=2016-07-22T16:21:52
источник