os.Getwd()
gibt den Quelldateipfad nicht zurück. Es gibt das aktuelle Arbeitsverzeichnis des Programms zurück (normalerweise das Verzeichnis, in dem Sie Ihr Programm ausgeführt haben).
Beispiel:
Angenommen ich eine main.go in /Users/Arman/go/src/github.com/rmaan/project/main.go
haben, die os.Getwd()
$ cd /Users/Arman/go/src/github.com/rmaan/project/
$ go run main.go
/Users/Arman/go/src/github.com/rmaan/project <nil>
nur ausgibt, wenn ich auf andere und führen Sie es ändern, ändert Ergebnis.
$ cd /Users/Arman/
$ go run ./go/src/github.com/rmaan/project/main.go
/Users/Arman <nil>
IMO sollten Sie explizit den Pfad übergeben Sie Ihr Programm wollen anstatt zu versuchen, es aus dem Kontext zu schließen (wie es speziell in der Produktionsumgebung ändern kann). Hier ist ein Beispiel mit flag
Paket.
package main
import (
"fmt"
"flag"
)
func main() {
var myPath string
flag.StringVar(&myPath, "my-path", "/", "Provide project path as an absolute path")
flag.Parse()
fmt.Printf("provided path was %s\n", myPath)
}
dann Ihr Programm wie folgt ausführen:
$ cd /Users/Arman/go/src/github.com/rmaan/project/
$ go run main.go --my-path /Users/Arman/go/src/github.com/rmaan/project/
provided path was /Users/Arman/go/src/github.com/rmaan/project/
$ # or more easily
$ go run main.go --my-path `pwd`
provided path was /Users/Arman/go/src/github.com/rmaan/project/
Wenn Sie ein Go-Programm ausführen, gibt es kein "Projekt". Sie führen nur eine kompilierte Binärdatei aus. es hat kein Konzept, wo es Quellcode sein könnte (oder sogar, wenn es auf dem Rechner existiert, auf dem es läuft), noch sollte es so sein. – Adrian
@Adrian - danke das Problem ist, dass ich JSON-Datei aus dem Root-Projekt lesen muss, das Problem, dass es sehr seltsam funktioniert, wenn ich das Programm in goland laufen lasse Pfad wie 'go/src/myapp/'und wenn ich führe es in vsCode Ich habe diesen Pfad 'go/src/myapp/src/server.go' im läuft es auf dem gleichen Projekt, so möchte ich einige generische Lösung finden, wie würdest du es tun? –
Ich würde den Pfad durch Konfigurationsdatei, Befehlszeilen-Flag und/oder Umgebungsvariable konfigurierbar machen. – Adrian