Antworten:
Sie können nicht mehr als eine main
in Ihrem Paket haben.
Im Allgemeinen können Sie nicht mehr als eine Funktion mit einem bestimmten Namen in einem Paket haben.
Entfernen Sie das main
In test2.go
und kompilieren Sie die Anwendung. Die demo
Funktion ist sichtbar von test1.go
.
main
in test2.go erstellen und ausführen, konnte test1.go jedoch nicht mit go run test1.go
still ausführen . Warum ?
go run test1.go test2.go
Go Lang erstellt / führt standardmäßig nur die angegebene Datei aus. Um alle Dateien zu verknüpfen, müssen Sie während der Ausführung den Namen aller Dateien angeben.
Führen Sie einen der beiden folgenden Befehle aus:
$go run test1.go test2.go. //order of file doesn't matter
$go run *.go
Sie sollten etwas Ähnliches tun, wenn Sie sie erstellen möchten.
Ich habe das Gleiche gesucht. Um Ihre Frage " Wie rufe ich Demo in Test2 von Test1 auf? " Zu beantworten, habe ich Folgendes getan. Führen Sie diesen Code mit dem go run test1.go
Befehl aus. Ändern Sie den current_folder auf den Ordner , wo test1.go ist.
test1.go
package main
import (
L "./lib"
)
func main() {
L.Demo()
}
lib \ test2.go
Legen Sie die Datei test2.go im Unterordner ab lib
package lib
import "fmt"
// This func must be Exported, Capitalized, and comment added.
func Demo() {
fmt.Println("HI")
}
package lib; expected main
Wenn Sie nur ausführen go run test1.go
und diese Datei einen Verweis auf eine Funktion in einer anderen Datei innerhalb desselben Pakets enthält, tritt ein Fehler auf, da Sie Go nicht angewiesen haben, das gesamte Paket auszuführen, sondern nur diese eine Datei auszuführen.
Sie können go to run als ganzes Paket festlegen, indem Sie die Dateien als Paket in dem auf verschiedene Arten kommandierten Lauf gruppieren. Hier einige Beispiele (wenn sich Ihr Terminal im Verzeichnis Ihres Pakets befindet):
go run ./
ODER
go run test1.go test2.go
ODER
go run *.go
Mit dem Befehl build können Sie dasselbe Verhalten erwarten. Nach dem Ausführen wird die erstellte ausführbare Datei als gruppiertes Paket ausgeführt, in dem die Dateien über die Funktionen des jeweils anderen Bescheid wissen. Beispiel:
go build ./
ODER
go build test1.go test2.go
ODER
go build *.go
Wenn Sie anschließend einfach die ausführbare Datei über die Befehlszeile aufrufen, erhalten Sie eine ähnliche Ausgabe wie mit dem Befehl run, wenn Sie alle Dateien zusammen als Ganzes ausgeführt haben. Ex:
./test1
Oder wie auch immer Ihr ausführbarer Dateiname beim Erstellen aufgerufen wird.
go fmt
? Wie im Terminal oder was? Wie zeigt es, dass er sich um irgendetwas kümmert?