Saya ingin memanggil fungsi dari file lain di go lang, dapatkah ada yang membantu?
test1.go
package main
func main() {
demo()
}
test2.go
package main
import "fmt"
func main() {
}
func demo() {
fmt.Println("HI")
}
Bagaimana memanggil demo
di test2
dari test1
?
go fmt
? Seperti di terminal atau apa? Bagaimana itu menunjukkan bahwa dia peduli tentang apapun?Jawaban:
Anda tidak boleh memiliki lebih dari satu
main
dalam paket Anda.Secara umum, Anda tidak dapat memiliki lebih dari satu fungsi dengan nama tertentu dalam sebuah paket.
Hapus
main
dalamtest2.go
dan kompilasi aplikasi. Thedemo
fungsi akan terlihat daritest1.go
.sumber
main
di test2.go tetapi gagal menjalankan test1.go menggunakango run test1.go
masih. Kenapa?go run test1.go test2.go
Go Lang secara default membangun / hanya menjalankan file yang disebutkan. Untuk menautkan semua file, Anda perlu menentukan nama semua file saat menjalankan.
Jalankan salah satu dari dua perintah di bawah ini:
$go run test1.go test2.go. //order of file doesn't matter $go run *.go
Anda harus melakukan hal serupa, jika Anda ingin membangunnya.
sumber
go run *.go
bersih. Itulah yang saya butuhkanSaya mencari hal yang sama. Untuk menjawab pertanyaan Anda " Bagaimana cara memanggil demo di test2 dari test1? ", Inilah cara saya melakukannya. Jalankan kode ini dengan
go run test1.go
perintah. Ubah current_folder ke folder tempat test1.go berada.test1.go
package main import ( L "./lib" ) func main() { L.Demo() }
lib \ test2.go
Letakkan file test2.go di subfolder
lib
package lib import "fmt" // This func must be Exported, Capitalized, and comment added. func Demo() { fmt.Println("HI") }
sumber
package lib; expected main
Jika Anda baru saja menjalankan
go run test1.go
dan file itu memiliki referensi ke suatu fungsi di file lain dalam paket yang sama, ini akan error karena Anda tidak memberi tahu Go untuk menjalankan seluruh paket, Anda menyuruhnya untuk hanya menjalankan satu file itu.Anda dapat membedakan go to run sebagai keseluruhan paket dengan mengelompokkan file sebagai paket dalam menjalankan commaned dengan beberapa cara. Berikut ini beberapa contoh (jika terminal Anda ada di direktori paket Anda):
go run ./
ATAU
go run test1.go test2.go
ATAU
go run *.go
Anda dapat mengharapkan perilaku yang sama menggunakan perintah build, dan setelah menjalankan executable yang dibuat akan berjalan sebagai paket yang dikelompokkan, di mana file mengetahui tentang fungsi masing-masing, dll. Contoh:
go build ./
ATAU
go build test1.go test2.go
ATAU
go build *.go
Dan kemudian setelah itu hanya memanggil yang dapat dieksekusi dari baris perintah akan memberi Anda output yang mirip dengan menggunakan perintah run ketika Anda menjalankan semua file bersama sebagai satu paket keseluruhan. Ex:
./test1
Atau apa pun nama file Anda yang dapat dieksekusi dipanggil saat dibuat.
sumber
duplikat_main.go
package main import ( "fmt" "os" ) func main() { counts := make(map[string]int) files := os.Args[1:] if len(files) == 0 { countLines(os.Stdin, counts) } else { for _, arg := range files { f, err := os.Open(arg) if err != nil { fmt.Fprintf(os.Stderr, "dup2: %v\n", err) continue } countLines(f, counts) f.Close() } } for line, n := range counts { if n > 1 { fmt.Printf("%d\t%s\n", n, line) } } }
countLines.go
package main import ( "bufio" "os" ) func countLines(f *os.File, counts map[string]int) { input := bufio.NewScanner(f) for input.Scan() { counts[input.Text()]++ } }
go run ch1_dup2.go countLines.go abc.txt
go run *.go abc.txt
go build ./
go build ch1_dup2.go countLines.go
go build *.go
sumber