Go でソース ファイル ディレクトリからファイルにアクセスする
インタープリタ言語とは異なり、Go プログラムは直接実行されるのではなくコンパイルされます。これは、コンパイル後、バイナリを実行するためにソース ファイルが必要なくなることを意味します。その結果、Go は、ソース ファイルの場所を決定するための Ruby の __FILE__ マクロに直接相当するものを提供しません。
Go でバイナリ コードを生成するために使用される主な関数は、os.Open 関数です。デフォルトでは、この関数は現在の作業ディレクトリ ($PWD) 内のファイルを検索します。ソース ファイルと同じディレクトリにあるファイルを開くには、相対パスを使用できます。ただし、この方法は、特にソース ファイルが別の場所に移動またはコピーされる場合には必ずしも便利であるとは限りません。
この問題に対処するには、ランタイム パッケージの runtime.Caller 関数を使用することをお勧めします。この関数は多くの引数を受け入れます。そのうちの 1 つは検査対象のスタックの深さです。値 0 を指定すると、runtime.Caller は、Caller への呼び出しを含む関数の呼び出し元のファイル名と行番号を返します。例:
<code class="go">import "runtime" func main() { _, file, _, _ := runtime.Caller(0) err := os.Open(file + "/myfile.txt") if err != nil { log.Fatal(err) } }</code>
このコードでは、runtime.Caller 関数を使用してソース ファイルのファイル名を取得し、そのファイル名を開きたいファイルへの相対パスと組み合わせます。これにより、ファイルは場所に関係なく、常にソース ファイルに対して相対的に開かれるようになります。
以上がGo でソース ファイル ディレクトリからファイルにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。