Подтвердить что ты не робот

Голанская условная компиляция

У меня есть проблема с условной компиляцией в 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
4b9b3361

Ответ 1

Вы должны следовать // +build XXX пустой строкой.

В моем кратком поиске я не мог найти, где/если это задокументировано. Но источник четко называет его

Ответ 2

Правильно, вы должны оставить пустую строку, а не точно после // +build XXX, но до package main, потому что все строки комментариев перед объявлением пакета считаются описанием пакета и анализируются godoc.

Ответ 3

Создание пакета

Строить ограничения

Ограничение сборки - это комментарий строки, начинающийся с директивы +build, в котором перечислены условия, при которых файл должен быть включены в пакет. Ограничения могут появляться в любом источнике файл (а не только Go), но они должны отображаться в верхней части файла, предшествуют только пустым строкам и другим комментариям строки.

Чтобы отличить ограничения сборки от документации пакета, серия из строковых ограничений должна следовать пустая строка.

Добавьте пустую строку после ограничения сборки. Например,

// +build main1

package main

import (
    "fmt"
)

func main() {
    fmt.Println("This is main 1")
}

Ответ 4

http://golang.org/pkg/go/build/ Строить ограничения "Чтобы отличить ограничения сборки от документации пакета, последовательность ограничений сборки должна сопровождаться пустой строкой".