2012-05-31 11 views
43

Bu yüzden, hepsi aynı pakete (ana) ait olan üç dosyadan oluşan küçük bir programım var, ancak "main.go inşa et" yaptığımda, yapı başarılı olmaz. Sadece bir dosya (main.go) olduğunda her şey iyi çalıştı. Şimdi kodu ayırmak için biraz çaba harcadım, derleyici main.go'dan alınmış olan şeyleri bulamıyor ve bu iki dosyaya (main.go ile aynı dizinde yer alan) yerleştirilmiş gibi görünüyor. . Hangi "undefined 'type'" hatalarıyla sonuçlanır. Birden çok dosyadan oluşan Go programı nasıl derlenir?

Ben GOPATH değişkeni ayarlama hakkında bir şeyler okumak, bu yüzden
set GOPATH=%cd% 
go build main.go 

çalıştı ama bu da işe yaramadı.

Herhangi bir yardım için teşekkür ederiz.

cevap

50

Eğer myprog adlı bir program yazıyoruz düşünüldüğünde: Sonra

GOPATH için myproject/go eklemek Ve çalıştırmak

bu

myproject/go/src/myprog/xxx.go 

gibi bir dizindeki tüm dosyaları koyun

go install myprog 

Bu şekilde başka bir paket ekleyebileceksiniz İsterseniz prog/go/src'deki programlar ve programlar.

Referans: http://golang.org/doc/code.html

(bu doc ​​ilk başta her zaman yeni gelenler tarafından kaçırılmış ve genellikle kötü anlaşılmaktadır O Git ekibinin büyük ilgi IMO almalıdır.) Eğer main.go den kodunu ayırmak zaman

+0

Gerçekten, gözden kaçırdığım çok kullanışlı bir bölüm. Teşekkürler! – Vitaly

+1

neden/go/ve kurtulmak değil myproject/src? –

+0

da, "myprog'u yükle" projenin kaynağını bir şekilde $ GOPATH konumuna yazar mı? Bu doğru mu? eğer öyleyse, bu açıklamanın cevabın bir parçası olarak olması güzel olurdu. –

45

Örneğin, more.go içine, bu dosyayı go build/go run/go install'a iletmeniz yeterlidir. Daha önce şimdi

go build main.go 

sizi ran Yani eğer

basitçe

go build main.go more.go 

olarak daha fazla bilgi:

go build --help 

devletler:

İkincisi beklediği dosyaları gitmek ise go build ve go install, bağımsız değişkenleri olarak paket isimlerini beklemek o ilk iki durumda go run farklılık gösterdiğini
If the arguments are a list of .go files, build treats them as a list 
of source files specifying a single package. 

dikkat edin. Bununla birlikte, ilk ikisi de go install yaptığı gibi go dosyalarını kabul edecektir.

merak ediyorsanız: sadece build paketleri/dosyaları, install senin GOPATH nesne ve ikili dosyaları üretecek olacak ve run derlemek ve programı çalıştırın inşa.

+3

Daha fazla dosya eklemeye devam etmek istemiyorsanız, regex kullanın: go run * .go – NateW

+0

Tamam, git her zaman sadece tek bir yürütülebilir dosya yazıyor mu? Yürütülebilir dosyaları (Java'da olduğu gibi) ayrı tutmuyor mu? –

+1

go build * .go, işe yarıyor mu? benim için değil –

18

Ayrıca sadece/myprog

Sonra

yalnızca uygulamanızı çalıştırmak için

./myprog 

yazabilirsiniz projenizin klasör myproject/go/src

go build 

çalıştırabilir

+2

sürümüne yükseltilmeli. – user2284570