Saya mencoba untuk menulis program dasar yang memanggil fungsi pada file yang berbeda, tetapi merupakan bagian dari paket yang sama. Namun, ia mengembalikan:
undefined: NewEmployee
Ini kode sumbernya:
main.go
:
package main
func main() {
emp := NewEmployee()
}
employee.go
:
package main
type Employee struct {
name string
age int
}
func NewEmployee() *Employee {
p := &Employee{}
return p
}
func PrintEmployee (p *Employee) {
return "Hello world!"
}
package x
, juga paket utama Anda biasanya hanya berisi satu file, lalu mengimpor bagian lain yang diperlukango run
? (dan lihat golang.org/doc/code.html )main.go
danemployee.go
? Karena semua file go seharusnya memiliki pernyataan paket, dan saya tidak melihat ada di Anda. Lihat: golang.org/doc/code.html#PackageNamesgo
alat.Jawaban:
Silakan baca "Cara Menulis Kode Pergi" .
Jangan gunakan
/src
di AndaGOPATH
. Paket berada di$GOPATH/src
.Untuk
build
atauinstall
Anda perlu memiliki file Anda di direktori paket.Untuk
go run
, Anda perlu menyediakan semua file sebagai argumen:Tapi, Anda hampir selalu harus menggunakan
go install
, ataugo build
(dan lebih disukai yang pertama, karenago build
menyebabkan kebingungan ketika bekerja dengan paket non-utama)sumber
$ go run *.go
akan menjadi jalan pintas alih-alih menjalankan semua fileSaya baru saja mengalami masalah yang sama di GoLand (yaitu Intellij IDEA for Go) dan mencari solusinya. Anda perlu mengubah
Run kind
dariFile
kePackage
atauDirectory
. Anda dapat memilih ini dari drop-down jika Anda masuk keRun/Edit
Konfigurasi.Misalnya: untuk paket
~/go/src/a_package
, gunakan aPackage path
daria_package
dan aDirectory
dari~/go/src/a_package
danRun kind
dariPackage
atauDirectory
.sumber
Jika Anda menggunakan
go run
, lakukango run *.go
. Ini akan secara otomatis menemukan semua file go di direktori kerja saat ini, kompilasi dan kemudian jalankan fungsi utama Anda.sumber
go run !(*_test).go
- Golang: jalankan semua file .go dalam direktori saat ini melalui baris perintah (paket multi-file)Anda dapat mencoba salah satu dari berikut ini.
Metode 01 : anggap nama proyek Anda
MyProject
go build
dan tekan enter../MyProject
dan tekan enterAnda bisa melakukan kedua langkah sekaligus dengan mengetik
go build && ./MyProject
. itu akan menjalankan proyek Anda dengan benar dengan semuago
file.Metode 02
cukup ketik
go run *.go
dan tekan enter. ini akan menjalankan semuago files
.Semoga ini bisa membantu seseorang.
sumber
Jika Anda ingin memanggil fungsi dari file go lain dan Anda menggunakan Goland, kemudian temukan opsi 'Edit konfigurasi' dari menu Run dan ubah jenis run dari File ke Direktori. Ini menghapus semua kesalahan dan memungkinkan Anda untuk memanggil fungsi dari file go lainnya.
sumber
Saya mengalami masalah yang sama dengan
Go11
, hanya ingin berbagi bagaimana saya menyelesaikannya untuk membantu orang lain kalau-kalau mereka mengalami masalah yang sama.Saya memiliki proyek Go saya di luar
$GOPATH
, jadi saya harus dihidupkanGO111MODULE=on
tanpa opsi ini dihidupkan, itu akan memberi Anda masalah ini; bahkan jika Anda mencoba membangun atau menguji keseluruhanpackage
ataudirectory
itu tidak akan diselesaikan tanpaGO111MODULE=on
sumber
Anda harus menggunakan modul go sekarang, jika Anda tidak mengikuti cara menulis kode go
Dengan modul go, Anda tidak harus memasukkan kode ke dalam $ GOPATH / src. itu dapat hidup di lokasi lain juga.
Anda dapat memindahkan kode ke direktori yang berbeda seperti / karyawan, Untuk membuatnya berfungsi Tepat di bawah direktori karyawan inisialisasi modul go
sumber
Jika folder sumber Anda terstruktur / go / src / blog (dengan asumsi nama folder sumber Anda adalah blog).
Itu harus menjalankan semua file Anda secara bersamaan, alih-alih Anda harus membuat daftar file secara manual atau "memukul" metode pada baris perintah.
sumber
go run .
akan menjalankan semua file Anda. Titik masuk adalah fungsimain()
yang harus unik untukmain
paket.Pilihan lain adalah dengan membangun biner
go build
dan menjalankannya.sumber
Cukup gunakan perintah
go run *.go
untuk menjalankan semua file go dalam paket Anda!sumber