2013-03-05 11 views
22

मुझे जाने के आवेदन के विभिन्न संस्करणों को बनाने में सक्षम होना चाहिए; एक 'डीबग' संस्करण और एक सामान्य संस्करण।बिल्ड टैग का सही तरीके से उपयोग कैसे करें?

यह करना आसान है; मेरे पास बस एक कॉन्स डेबग है, जो एप्लिकेशन के व्यवहार को नियंत्रित करता है, लेकिन जब भी मुझे बिल्ड प्रकारों के बीच स्वैप करने की आवश्यकता होती है तो कॉन्फ़िगरेशन फ़ाइल को संपादित करना मुश्किल होता है।

मैं जाने का निर्माण (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 

फिर मुझे "गो बिल्ड" या "बिल्ड -टैग डीबग" का उपयोग करके निर्माण करने में सक्षम होना चाहिए, और टैग को config.go को बाहर करना चाहिए और config.debug.go शामिल करना चाहिए।

... लेकिन यह काम नहीं करता है। मैं:

src/निर्माण/config.go: 3: डीबग इस ब्लॉक (< 0>) src/निर्माण पर पिछले घोषणा में redeclared/config.debug.go: 3

मैं क्या गलत कर रहा हूं?

क्या ऐसा करने का एक और अधिक उचित #ifdef शैली तरीका है जिसका उपयोग करना चाहिए?

उत्तर

23

my answer to another question देखें। "// + बिल्ड" लाइन के बाद आपको खाली रेखा की आवश्यकता है।

इसके अलावा, आप शायद "!" config.go में, config.debug.go में नहीं; और संभवतः आप चाहते हैं कि कोई "DEBUG = false" हो।

+0

yup धन्यवाद, यह समस्या थी; कम बेवकूफ होने के लिए संपादित प्रश्न। – Doug

13

आप उस के लिए समय स्थिरांक संकलन इस्तेमाल कर सकते हैं: आप के साथ

go build -ldflags '-X main.DEBUG=YES' test.go 

चर DEBUG पैकेज मुख्य से स्ट्रिंग "हाँ" पर सेट हो जाएगा अपने कार्यक्रम संकलन है। अन्यथा यह इसकी घोषित सामग्री रखता है।

package main 

import (
    "fmt" 
) 

var DEBUG = "NO" 

func main() { 
    fmt.Printf("DEBUG is %q\n", DEBUG) 
} 

संपादित करें: (?) जाओ 1.6 स्विच -X main.DEBUG=YES है, इससे पहले कि है कि यह -X main.DEBUG YES था (= के बिना) के बाद से। @poorva से एक टिप्पणी के लिए धन्यवाद।

+1

क्या यह गैर-स्ट्रिंग डेटा के लिए संभव है? –

+0

@MattJoiner ने सब कुछ परीक्षण नहीं किया लेकिन यह चींटियों के साथ संभव है। – mschuett

+0

कमांड अब बदल गया है - 'बिल्ड -ल्डफ्लैग' -एक्स मुख्य .DEBUG = YES 'test.go' – poorva

संबंधित मुद्दे