Golang でプログラミングするときは、通常、ファイルを開いて読み書きする必要があります。ただし、同時に、システム リソースを解放するために、ファイルの使用が終了したらファイルを確実に閉じる必要もあります。そこで、この記事ではGolangでファイルを閉じる方法を紹介します。
Golang では、os.Open()
関数を使用してファイルを開き、os.Create()## を使用します。 # 関数は新しいファイルを作成できます。これらの関数は、
*File 型のインスタンスを返します。使い終わったら、
file.Close() 関数を使用してファイルを閉じてシステム リソースを解放する必要があります。そうしないと、ファイル記述子がリークし、最終的にシステム リソース全体が消費されてしまいます。
file, err := os.Open("example.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) }ここでは
defer ステートメントが使用されていることに注意してください。関数で使用されます。戻る前に
file.Close() メソッドを自動的に実行します。こうすることで、関数内でエラーが発生した場合でもファイルが正しく閉じられるようになります。
file.Close()メソッドを使用してファイルを閉じることができます。ただし、ファイルを閉じるときに失敗する場合があります。たとえば、次のコードでは、存在しないファイルを意図的に開きます。
file, err := os.Open("does_not_exist.txt") if err != nil { log.Fatal(err) } defer file.Close()ファイルが存在しないため、ファイルを開くときにエラーが返されます。この場合、
file.Close() によって別のエラーがトリガーされ、閉じるのが失敗します。この場合、ファイルを閉じる前にエラーを確認する必要があります。例:
file, err := os.Open("does_not_exist.txt") if err != nil { log.Fatal(err) } defer func() { if err := file.Close(); err != nil { log.Fatal(err) } }()ここでは、無名関数を使用し、ファイルを閉じる操作をこの関数に配置します。関数の実行中に、ファイルを閉じるときにエラーが発生したかどうかを再度確認します。シャットダウンが失敗した場合は、
log.Fatal() 関数を呼び出してエラーを記録し、プログラムを終了します。
close() システムを呼び出すオペレーティング システムの呼び出しにすぎません。ファイル記述子を閉じる関数。 Golang では、
os.File 型は
io.Closer インターフェイスを実装します。このインターフェイスにはメソッドが 1 つだけあります:
os.File の
type Closer interface { Close() error }
、
Close() 関数は実際には単に
syscall.Close() 関数を呼び出します。
func (file *File) Close() error { if file == nil { return syscall.EINVAL } if file == os.Stdin || file == os.Stdout || file == os.Stderr { return nil } return file.file.close() }
Close() 関数はいくつかの特別な条件もチェックすることに注意してください。たとえば、
file は
nil または特別な標準入力出力である可能性があります。ストリーム。このような場合、シャットダウン操作では実際のアクションは実行されません。
defer キーワードを使用することをお勧めします。こうすることで、関数が戻る前にエラーが発生した場合でもファイルを確実に閉じることができます。たとえば、次のコードは、ファイルを読み取った後、ファイルを自動的に閉じます。
file, err := os.Open("example.txt") if err != nil { log.Fatal(err) } defer file.Close() // 读取文件
defer ステートメントの実行順序は「後入れ先出し」であるため、関数の前の任意の時点で実行されます。が返されると、ファイルが閉じられていることを確認できます。
os.Open() 関数を使用してファイルを開き、
file.Close() メソッドを使用します。ファイルを閉じてリソースを解放します。ファイルを閉じるときにエラーを確認し、ログに記録する必要があります。さらに、
defer キーワードを使用すると、ファイルが使用および操作されるときに、ファイルが常に適切に閉じられるようになります。
以上がgolang ファイルを閉じるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。