Ответ 1
Посмотрите мой ответ на другой вопрос. Вам понадобится пустая строка после строки "//+ build".
Кроме того, вы, вероятно, хотите "!" в config.go, а не в config.debug.go; и предположительно вы хотите, чтобы он был "DEBUG = false".
Мне нужно иметь возможность создавать разные версии приложения go; версия отладки и нормальная версия.
Это легко сделать; У меня просто есть константа DEBUG, которая управляет поведением приложения, но раздражает необходимость редактировать файл конфигурации каждый раз, когда мне нужно обмениваться между типами сборки.
Я читал о go build (http://golang.org/pkg/go/build/) и тегах, я думал, что, возможно, я мог бы это сделать:
config.go:
// +build !debug
package build
const DEBUG = false
config.debug.go:
// +build debug
package build
const DEBUG = true
Затем я должен был бы построить, используя "go build" или "go build -tags debug", и теги должны исключать config.go и включать config.debug.go.
... но это не работает. Я получаю:
src/build/config.go: 3: DEBUG обновлен в этом блоке (< 0 > ) previous Объявление в src/build/config.debug.go: 3
Что я делаю неправильно?
Есть ли еще один и более подходящий способ стиля #ifdef, который я должен использовать?
Посмотрите мой ответ на другой вопрос. Вам понадобится пустая строка после строки "//+ build".
Кроме того, вы, вероятно, хотите "!" в config.go, а не в config.debug.go; и предположительно вы хотите, чтобы он был "DEBUG = false".
Вы можете использовать константы времени компиляции для этого: если вы скомпилируете свою программу с помощью
go build -ldflags '-X main.DEBUG=YES' test.go
переменная DEBUG
из основного пакета будет установлена в строку "YES". В противном случае он сохраняет свое заявленное содержимое.
package main
import (
"fmt"
)
var DEBUG = "NO"
func main() {
fmt.Printf("DEBUG is %q\n", DEBUG)
}
Изменить: поскольку Go 1.6 (?) переключатель -X main.DEBUG=YES
, до этого он был -X main.DEBUG YES
(без =
). Благодаря комментарию от @poorva.