गो

2012-06-21 23 views
6

में सशर्त संकलन ENet के लिए CGo का उपयोग करके मैं wrapper लिखने की कोशिश कर रहा हूं।गो

जब मै मैक पर अपना रैपर संकलित करने की कोशिश करता था तो लाइब्रेरी पुरानी थी और थोड़ा अलग इंटरफ़ेस था। 99% कोड वही है जो कुछ सी कॉलों को बदलने की जरूरत है।

गो में इस तरह की समस्या से निपटने के लिए सबसे अच्छा अभ्यास क्या है?
क्या सशर्त संकलन या सशर्त आयात करने का कोई तरीका है?

उत्तर

1

गो में सशर्त संकलन या सशर्त आयात नहीं है। सी कोड में प्रकार अंतर को संभालें।

Are the [Go] authors opposed to preprocessing?

+0

गो वास्तव में फ़ाइल नाम प्रत्यय का उपयोग करके सशर्त संकलन करता है क्योंकि एंडबॉलहोम का जवाब दर्शाता है। –

+1

डाउनवॉटर नफरत करेंगे :)। गंभीरता से हालांकि, @peterSO के पास मेरी विशेष समस्या का सही उत्तर है। मैक चीज को एक लाल हेरिंग बदल देता है। वास्तविक समस्या लाइब्रेरी संस्करणों के साथ है, जिसे हेडर फ़ाइलों में केवल '# परिभाषित' के रूप में पहचाना जा सकता है। '_darwin.go' या' _linux.go' केवल समस्या को मुखौटा करेगा जब तक कि उनमें से एक ने पिछड़े असंगत परिवर्तन के साथ अपनी एननेट लाइब्रेरी को अपडेट नहीं किया। –

14

एक अलग फ़ाइल में बाहर प्लेटफ़ॉर्म-विशिष्ट सामान अलग है, उदा stuff.go

अब stuff.go विभिन्न प्लेटफार्मों के लिए संस्करणों के साथ, stuff_darwin.go (Mac पर), stuff_windows.go, stuff_linux.go, आदि

तरह की जगह किसी फ़ाइल की तरह एक प्रत्यय है , go कमांड केवल निर्दिष्ट मंच पर संकलित करेगा।

+0

यह जानना वाकई अच्छा है। –

+8

पैकेज के [ओवरव्यू] (http://golang.org/pkg/go/build/#overview) में "बिल्ड कॉन्स्ट्रिएंट्स" के तहत दस्तावेज चलाएं/बिल्ड करें। – Sonia

+1

यह वास्तव में एक शानदार समाधान है (यह गो फिट बैठता है)। –