Ana pakette birden fazla dosya içeren bir projeyi nasıl “çalıştırabilirim”?


150

Şu anda ana paketimde tek bir dosya var main.go. main.goKod yeniden kullanılamadığından , içeriğini ayrı bir paket oluşturmadan birden fazla dosyaya nasıl bölebilirim .

Bunun gibi bir dizin yapısı istiyorum:

$ ls foo

main.go
bar.go

bar.go

package main

import "fmt"

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

Daha sonra main.go

package main

func main() {
    Bar()
}

Ama go run main.gobana şunu verir:

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

Yanıtlar:


204

26 Temmuz 2019 Güncellemesi (go> = 1.11 için)

go run .

Orijinal cevap

Yukarıdaki kod aslında işe yarıyor. Sorun koşmam gerekti

go run *.go

onun yerine

go run main.go

6
Eğer yoksa *_test.gosizin klasörde. O zaman (1) shopt -s ext globve (2) 'ye ihtiyacınız var go run !(*_test).go.
getWeberForStackExchange

ve appengine kullananlar?
goodies4uall

Denedim go run ./cmd/myCmd/...ve benim için çalıştı. Belki de _test.godosya olduğunda doğru yol budur ?
Ocak

go run ../your_folderçalışma klasörünün içinden benim için çalışıyor
Andy

3
Just dogo run .
BarthesSimpson

66

Ağustos 2018 Güncellemesi, Go 1.11 ile , "Çalıştır" bölümü şunları belirtiyor:

go runKomut artık tek ithalat yolu, bir dizin adı veya tek bir paket uyan bir model sağlar.
Bu izin verir go run pkgveya go run diren önemlisigo run .


Orijinal cevap Ocak 2015

Belirtildiği gibi " Nasıl birden fazla dosya oluşan Git programını derlemek için? ", go runO zamandan beri dosyaların bir listesini, beklediği "derlerken ve ishal mainadlı Git kaynak dosyalarını içeren paketi".
Böylece mainpaketinizi kesinlikle birkaç dosyaya bölebilirsiniz go run.

Bu, go build/go installhangi paket adlarının beklendiğinden farklıdır (ve dosya adlarını değil).
Basit go build, üst klasörden sonra adlandırılabilir bir yürütülebilir dosya üretir.

Olarak, unutmayın bu iş parçacığı tarafından gösterilen bir go run *.goyana Windows CMD oturumda olmaz iş, kabuk joker genişlemesini yapmaz .


1
runWindows komut istemini kullanarak birden çok go dosyası çalıştırmak için bir geçici çözüm var mı ?
Luke

1
Teşekkürler! Bu bana bir ton yardımcı oldu. Neden aynı paketi olduğu için sadece main.go ile kodu çalıştıramadım merak ettim ama neden izin vermedi bana bir anlam ifade ediyor.
Chris

5

Belirtildiği gibi diyebilirsiniz, go run *.goancak Windows için komut dosyalarını listeleyebilirsiniz (* .go çalışmadığından) -go run main.go other.go third.go


Evet doğru. Pencerelerde çalıştırmak zorunda kaldımgo run .
KTM

3

Benim düşünceme göre, bu sorunun en iyi cevabı en üstteki cevaba yapılan yorumlarda gizlidir.

Sadece şunu çalıştırın:

go run .

Bu, ana paket içinde tüm dosyaları çalışır, ancak değil gibi bir hata mesajı vermek

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

Kudos @BarthesSimpson için


0

Windows için Cygwin'i yükleyin ve komut istemi yerine kullanın. "go run * .go" sonra çalışacaktır.


Bunun için MinGW'yi öneririm, ama bana sorarsanız yaklaşım doğru. Herkesin duygusal olarak gerçekten bağlı olabileceğinden şüpheliyimcmd.exe
Aleksandr Kravets

0

En son sürüme göre go gorilla mux kullanarak localhost üzerinde birden fazla dosya çalıştırmaya çalışıyorsanız (1.11). Aşağıdaki 2 komuttan birini kullanmayı deneyin.

  1. install && FolderName -port 8081 adresine gidin.

  2. build && ./FolderName -port 8081 adresine gidin.

Terminal'de komutu yürütmeden önce kaynak klasörde olduğunuzdan emin olun, yani go / src / FolderName.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.