2012-05-18 36 views
40

Tôi gặp rắc rối với việc biên soạn có điều kiện trong Go 1.Golang biên soạn có điều kiện

Đây là mã thử nghiệm của tôi. Có điều gì tôi hiểu sai về ràng buộc "// + build" và cờ "-tags" không?

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") 
} 

khi chạy "đi xây dựng", tôi vẫn nhận được biên dịch lỗi

$ go build -tags 'main1' 
# test 
./main2.go:8: main redeclared in this block 
     previous declaration at ./main1.go:8 

Trả lời

59

Bạn phải làm theo // +build XXX với một trống hàng.

Trong tìm kiếm ngắn gọn của tôi, tôi không thể tìm thấy nơi/nếu điều này được ghi lại. Nhưng the source rõ gọi nó ra

+3

Tài liệu được mô tả trong http://golang.org/pkg/go/build/#hdr-Build_Constraints. Cụ thể: "Để phân biệt ràng buộc xây dựng từ tài liệu gói, một loạt các ràng buộc xây dựng phải được theo sau bởi một dòng trống." – chowey

12

Đúng vậy, bạn phải rời khỏi một dòng trống, không chính xác sau khi // +build XXX nhưng trước khi package main vì tất cả các dòng bình luận trước dòng tuyên bố gói được coi là mô tả của gói và phân tích bằng godoc .

4

http://golang.org/pkg/go/build/ hạn chế xây dựng “Để phân biệt xây dựng những hạn chế từ tài liệu gói, một loạt các build hạn chế phải được theo sau bởi một dòng trống.”

9

Package build

Xây dựng chế

Một ràng buộc xây dựng là nhận xét dòng bắt đầu bằng chỉ thị +build liệt kê các điều kiện mà theo đó một tệp nên được bao gồm trong gói. Các ràng buộc có thể xuất hiện ở bất kỳ loại tệp nào (không chỉ Go), nhưng chúng phải xuất hiện gần đầu tệp, chỉ đứng trước dòng trống và các nhận xét dòng khác.

Để phân biệt các ràng buộc xây dựng từ tài liệu gói, một chuỗi các ràng buộc xây dựng phải được theo sau bởi một dòng trống.

Thêm dòng trống sau ràng buộc xây dựng. Ví dụ:

// +build main1 

package main 

import (
    "fmt" 
) 

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