os.Getwd()
ソースファイルのパスが返されません。プログラムの現在の作業ディレクトリ(通常はプログラムを実行したディレクトリ)を返します。
例:
は私が他のディレクトリに変更し、そこに実行すると、結果が変わるだけでos.Getwd()
$ cd /Users/Arman/go/src/github.com/rmaan/project/
$ go run main.go
/Users/Arman/go/src/github.com/rmaan/project <nil>
を出力/Users/Arman/go/src/github.com/rmaan/project/main.go
でmain.goを持っていると仮定します。
$ cd /Users/Arman/
$ go run ./go/src/github.com/rmaan/project/main.go
/Users/Arman <nil>
IMO明示的に代わりに(それが本番環境で特別に変更される可能性として)文脈からそれを推測しようとしているのあなたのプログラムにしたいパスを渡す必要があります。ここにはflag
パッケージの例があります。
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)
}
次のようにあなたのプログラムを実行します。
$ 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/
を使用すると、囲碁プログラムを実行すると、何の「プロジェクト」はありません。あなたはコンパイルされたバイナリを実行しています。ソースコードがどこにあるのか(たとえそれが実行されているマシンに存在していても)どこの概念でもないし、そうでなければならないという概念もない。 – Adrian
@Adrian - 問題は私がルートプロジェクトからjsonファイルを読む必要があることです。問題は非常に奇妙です.Golandでプログラムを実行すると、 'go/src/myapp /'のようなパスが提供されます。私はこのパスを 'go/src/myapp/src/server.go'と同じプロジェクトで実行しているので、いくつかの汎用的な解決法を見つけたいと思います。 –
私は、設定ファイル、コマンドラインフラグ、環境変数でパスを設定できるようにしたいと思います。 – Adrian