Ответ 1
Вы должны следовать // +build XXX
пустой строкой.
В моем кратком поиске я не мог найти, где/если это задокументировано. Но источник четко называет его
У меня есть проблема с условной компиляцией в Go 1.
Вот мой тестовый код. Есть ли что-то, что я неправильно понимаю о ограничении "//+ build" и флаге "-tags"?
main1.go
// +build main1
package main
import (
"fmt"
)
func main() {
fmt.Println("This is main 1")
}
main2.go
// +build main2
package main
import (
"fmt"
)
func main() {
fmt.Println("This is main 2")
}
при запуске "go build" у меня все еще появилась ошибка компиляции
$ go build -tags 'main1'
# test
./main2.go:8: main redeclared in this block
previous declaration at ./main1.go:8
Вы должны следовать // +build XXX
пустой строкой.
В моем кратком поиске я не мог найти, где/если это задокументировано. Но источник четко называет его
Правильно, вы должны оставить пустую строку, а не точно после // +build XXX
, но до package main
, потому что все строки комментариев перед объявлением пакета считаются описанием пакета и анализируются godoc
.
Строить ограничения
Ограничение сборки - это комментарий строки, начинающийся с директивы
+build
, в котором перечислены условия, при которых файл должен быть включены в пакет. Ограничения могут появляться в любом источнике файл (а не только Go), но они должны отображаться в верхней части файла, предшествуют только пустым строкам и другим комментариям строки.Чтобы отличить ограничения сборки от документации пакета, серия из строковых ограничений должна следовать пустая строка.
Добавьте пустую строку после ограничения сборки. Например,
// +build main1
package main
import (
"fmt"
)
func main() {
fmt.Println("This is main 1")
}
http://golang.org/pkg/go/build/ Строить ограничения "Чтобы отличить ограничения сборки от документации пакета, последовательность ограничений сборки должна сопровождаться пустой строкой".