2012-05-02 13 views
12

मैं के साथ गूगल जाओ खेल रहा हूँ और मैं मज़ा आ रहा है कर रहा हूँ (!) में अपने स्थानीय पैकेज का संदर्भ है, लेकिन मैं पैकेज उपतंत्र के साथ कुछ समस्या आ रही है।बिल्ड और जाओ

मैं चला रहा हूं मैक ओएस एक्स शेर पर 1.0.1 चलाएं। मैंने बिना किसी समस्या के विभिन्न एकल फ़ाइल प्रोग्राम भी बनाए हैं (मैंने बिना किसी समस्या के एचटीएमएल/टेम्पलेट का उपयोग करके एक छोटा सा वेबपैप भी बनाया है और यह किसी भी त्रुटि के बिना संकलित और चलाता है)।

मैं एक "पुन: प्रयोज्य" पैकेज (even.go) में परिभाषित किया गया है:

package even 

func Even(i int) bool { 
    return i % 2 == 0 
} 

func Odd(i int) bool { 
    return i % 2 == 1 
} 

और एक उपभोक्ता कार्यक्रम (useeven.go):

package main 

import (
    "./even" 
    "fmt" 
) 

func main() { 
    a := 5 
    b := 6 

    fmt.Printf("%d is even %v?\n", a, even.Even(a)) 
    fmt.Printf("%d is odd %v?\n", b, even.Odd(b)) 
} 

लेकिन जब मैं "पुस्तकालय संकलन "

go build even.go 

मुझे कुछ भी नहीं मिला ... कोई त्रुटि नहीं, कोई संदेश नहीं ... क्या होता है?

मुझे यह कैसे करना चाहिए?

+0

तब क्या होता है? क्या आप कृपया अधिक स्पष्ट हो सकते हैं? क्या यह सफलतापूर्वक संकलित करता है? निष्पादन योग्य उत्पन्न किया गया है? – Chaos

+0

नहीं, कोई निष्पादन योग्य नहीं बनाया गया। नहीं, कोई आउटपुट संदेश नहीं ... – gsscoder

उत्तर

9

अपने प्रश्न, का जवाब "मैं इस करना चाहिए कैसे?" How to Write Go Code. में समझाया गया है यह वास्तव में बहुत महत्वपूर्ण चीजें है और यह एक नींव है जो आपको आगे जाने से पहले होना चाहिए।

go build का व्यवहार परेशान प्रतीत हो सकता है, लेकिन वास्तव में कमांड लाइन प्रोग्राम के लिए पारंपरिक है - कोई आउटपुट का मतलब है कि प्रोग्राम सफलतापूर्वक भाग गया। तो यह क्या किया? इसके लिए आप दस्तावेज़ पढ़ सकते हैं। go help build बताते हैं,

... अन्यथा निर्माण संकुल को संकलित करता है लेकिन परिणाम को छोड़ देता है, केवल एक चेक कि संकुल बनाया जा सकता है के रूप में सेवारत।

क्या, आप और अधिक चाहते थे? बेशक। "गो कोड कैसे लिखें" यह करने के अच्छे तरीके बताते हैं। आपके प्रोग्राम के त्वरित समाधान के लिए, मैं समझाऊंगा कि go कमांड प्रत्येक पैकेज और प्रत्येक निष्पादन योग्य प्रोग्राम को एक अलग निर्देशिका में होने की अपेक्षा करता है। यदि आप केवल useeven.go के स्थान के नीचे भी एक निर्देशिका बनाते हैं, और यहां तक ​​कि .go को भी ले जाते हैं, तो go run useeven.go जैसे ही आपके पास चलना चाहिए। जब यह एक "एकल मुख्य पैकेज" बनाता है

+1

मैंने ** ** ** नामक एक निर्देशिका बनाई है और अंदर ** भी .go ** स्थानांतरित की है। अब मैं प्रोग्राम बना और चला सकता हूं। फिर (सीखने के उद्देश्य के लिए) मैंने अभी तक ** ** ** ** ** ** का नाम बदल दिया है। निष्पादन योग्य अभी भी काम करता है लेकिन जब मैं 'go run useeven.go' का उपयोग करता हूं तो यह विफल हो जाता है। मुझे लगता है कि यह सबूत है कि ** उपयोग ** ** निष्पादन योग्य तब मॉड्यूल ** even.go ** अपनी बिन छवि में एम्बेडेड है। कोड चलाने के लिए जाने से पहले मैं हमेशा दस्तावेज़ पढ़ता हूं, लेकिन मैं इस भाषा में नया हूं और इस बिंदु में दस्तावेज़ (मेरे लिए) वास्तव में स्पष्ट नहीं हैं। हो सकता है कि रनटाइम पर कुछ प्रकार के _dynamic link_ प्राप्त करने के लिए, हमें मॉड्यूल को 'इंस्टॉल' करने की आवश्यकता है। क्या यह सही है? – gsscoder

+1

नहीं। वैसे भी, जाओ कार्यक्रम हमेशा स्थिर रूप से जुड़े होते हैं और रन समय पर गतिशील रूप से जुड़े पैकेजों का कोई तरीका नहीं है। 'इंस्टॉल करें 'दस्तावेज़ों में समझाया गया है,' GOPATH' का उपयोग करता है, ताकि आयात पथ में" ./ "जैसे फ़ाइल सिस्टम विनिर्देशों से बचा जा सके। – Sonia

+0

ठीक है, अब यह बिंदु स्पष्ट है। वैसे भी मैं इस भाषा को बढ़ने की उम्मीद करता हूं। मैंने इसे बहुत अभिव्यक्तिपूर्ण, स्पष्ट और सिंथेटिक पाया। मुझे आशा है कि पैकेज लाइब्रेरी अधिक से अधिक क्षेत्रों में उपयोग बढ़ाने के लिए बढ़ेगी। – gsscoder

2

go build केवल कोई आउटपुट फ़ाइल उत्पन्न करता है। यदि आप अपने अन्य पैकेज के लिए फ़ाइल आउटपुट करना चाहते हैं तो आपको go install का उपयोग करना चाहिए। वह उस पैकेज को आपके pkgs निर्देशिका में बना और स्थापित करेगा।

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