मैं मुख्य पैकेज में एकाधिक फ़ाइलों वाली परियोजना "कैसे चला सकता हूं"?


150

मेरे पास वर्तमान में मेरे मुख्य पैकेज में एक ही फाइल है main.gomain.goएक अलग पैकेज बनाए बिना मैं कई फ़ाइलों की सामग्री को कैसे विभाजित कर सकता हूं क्योंकि कोड पुन: प्रयोज्य नहीं है।

मुझे इस तरह एक निर्देशिका संरचना चाहिए:

$ ls foo

main.go
bar.go

bar.go

package main

import "fmt"

func Bar() {
    fmt.Println("Bar")
}

फिर main.go

package main

func main() {
    Bar()
}

लेकिन go run main.goमुझे देता है:

# command-line-arguments
./main.go:4:2: undefined: Bar

जवाबों:


204

अपडेट 26 जुलाई 2019 (जाने के लिए = = 1.11)

go run .

मूल उत्तर

उपरोक्त कोड वास्तव में काम करता है। समस्या मुझे चलाने की थी

go run *.go

के बजाय

go run main.go

6
जब तक *_test.goआपके फोल्डर में न हो। फिर आपको (1) shopt -s ext globऔर (2) की आवश्यकता है go run !(*_test).go
getWeberForStackExchange

और ऐपेंगिन का उपयोग करने वालों के बारे में क्या?
goodies4uall

मैंने कोशिश की go run ./cmd/myCmd/...और यह मेरे लिए काम कर गया। शायद यह सही तरीका है जब _test.goफाइलें होती हैं ?
विन्गेरिया

go run ../your_folderअंदर से काम कर रहे फ़ोल्डर मेरे लिए काम करता है
एंडी

3
बस करोgo run .
BarthesSimpson

66

अगस्त 2018 को अपडेट करें, 1.11 गो के साथ , एक सेक्शन "रन" बताता है:

go runआदेश अब एक ही आयात पथ, एक निर्देशिका का नाम या एक ही पैकेज मिलान एक पैटर्न अनुमति देता है।
यह अनुमति देता है go run pkgया go run dir, सबसे महत्वपूर्ण बातgo run .


मूल उत्तर जनवरी 2015

जैसा कि " एकाधिक फ़ाइलों से युक्त गो कार्यक्रम को कैसे संकलित किया जाए? " में वर्णित है , फाइलोंgo run की एक सूची की अपेक्षा करता है, क्योंकि यह " mainगो स्रोत फाइलों के नाम से युक्त संकुल को संकलित और चलाता है "।
तो आप निश्चित रूप से अपने mainपैकेज को कई फाइलों में विभाजित कर सकते हैं go run

go build/go installजो कि पैकेज नाम (और फ़ाइल नाम नहीं) की अपेक्षा से भिन्न है ।
एक साधारण go buildमूल फ़ोल्डर के नाम पर एक निष्पादन योग्य उत्पादन होगा।

ध्यान दें, जैसा कि इस थ्रेड द्वारा समझाया गया है , go run *.goविंडोज सीएमडी सत्र में काम नहीं करेगा, क्योंकि शेल वाइल्डकार्ड विस्तार नहीं करता है


1
क्या runविंडोज कमांड प्रॉम्प्ट का उपयोग करने के साथ कई गो फ़ाइलों को चलाने के लिए एक समाधान है ?
ल्यूक

1
धन्यवाद! इससे मुझे एक टन की मदद मिली। मैं सोचता रहा कि क्यों मैं कोड को सिर्फ main.go के साथ नहीं चला सकता क्योंकि यह एक ही पैकेज था, लेकिन यह मेरे लिए इस तरह से समझ में आता है कि उन्होंने इसके लिए अनुमति क्यों नहीं दी।
क्रिस

5

जैसा कि उल्लेख किया गया है, आप कह सकते हैं go run *.goलेकिन विंडोज के लिए आप केवल स्क्रिप्ट फ़ाइलों को सूचीबद्ध कर सकते हैं (क्योंकि * .go काम नहीं करेगा) -go run main.go other.go third.go


हाँ, यह सही है। खिड़कियों में मुझे भागना पड़ाgo run .
केटीएम

3

मेरी राय में, इस सवाल का सबसे अच्छा जवाब शीर्ष उत्तर के लिए टिप्पणियों में छिपा हुआ है।

बस इसे चलाएं:

go run .

यह सभी फाइलों को मुख्य पैकेज में चलाएगा, लेकिन जैसे त्रुटि संदेश नहीं देगा

go run: cannot run *_test.go files (main_test.go)

कुडोस से @BarthesSimpson


0

Windows के लिए Cygwin स्थापित करें और कमांड प्रॉम्प्ट के बजाय इसका उपयोग करें। "जाओ भागो * .गो" तब काम करेगा।


मैं उसके लिए मिनगॉव का सुझाव दूंगा, लेकिन यदि आप मुझसे पूछें तो दृष्टिकोण सही है। मुझे संदेह है कि किसी को भी भावनात्मक रूप से संलग्न किया जा सकता हैcmd.exe
अलेक्सांद्र क्रावट्स

0

यदि आप नवीनतम संस्करण (1.11) के अनुसार गोरिल्ला मक्स का उपयोग करके लोकलहोस्ट पर कई फाइलें चलाने का प्रयास कर रहे हैं। निम्न 2 में से किसी भी आदेश का उपयोग करने का प्रयास करें।

  1. go install && FolderName -port 8081।

  2. go build &&//olderName -port 8081।

टर्मिनल में कमांड निष्पादित करने से पहले सुनिश्चित करें कि आप स्रोत फ़ोल्डर में हैं यानी go / src / FolderName।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.