2015-07-06 3 views
1

У меня есть переменная VERSION в замыкающий файл, который устанавливает версию для двоичного файла во время компиляции с помощью -ldflagsПолучение переменных файла make в пакете go?

VERSION = $(strip $(TIMESTAMP)) 
LDFLAGS = -ldflags "-X main.buildTime $(BUILD_TIME) -X main.buildNumber $(VERSION)" 

Теперь я хочу, чтобы получить версию в пакете, который не является main и распечатать его. Я попробовал кучу вариантов, но не смог заставить его работать.

Мой вопрос: как я могу получить его в пакете, а затем распечатать его клиенту во время выполнения, например you are connected to app version 2.0 .. ??

+0

Вы должны каким-то образом предоставить версию. Если это не 'пакет main', вам нужно импортировать пакет и прочитать переменную. – JimB

+0

так что ldflags устанавливают переменные в основном пакете 'main.buildTime' и т. Д., И я не могу импортировать main, поэтому я попытался установить его с другим пакетом, но почему-то все еще не работал, я получаю пустую строку :( – Varun

+0

Если вы 're установка переменной в main, она существует только по мере того, как вы устанавливаете ее в финальном двоичном файле, поэтому сделайте двоичный вывод версии со специальным флагом. Что касается «установки его другим пакетом», вам нужно будет показать например, потому что я не знаю, что вы имеете в виду. – JimB

ответ

2
структура

Каталог:

- main.go 
- test/ 
    - test.go 

test.go

package test 

var Version = "" 

main.go

package main 

import (
    "fmt" 
    "test" 
) 

func main() { 
    fmt.Println(test.Version) 
} 

Наконец, запустите:

go run -ldflags="-X test.Version 2.0.0" main.go 

Выходы:

> 2.0.0 

Поскольку мы можем указать путь импорта, мы можем установить значение строки везде, не только в главном.

От перехода 1,5 вверх, синтаксис изменен на importpath.name=string.

Смежные вопросы