Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save skanehira/17d1a88f36e6081fada9dd637850bbb2 to your computer and use it in GitHub Desktop.

Select an option

Save skanehira/17d1a88f36e6081fada9dd637850bbb2 to your computer and use it in GitHub Desktop.

Goのファイルコピー時のメモ

Goでファイルをコピーする時、io.Copyを使うとメモリ効率がよいとのこと。

良くない例

ioutil.ReadFileはファイルの中身を一気に読みんでメモリ上に保持するため、 サイズが大きいファイルだとメモリをがっつり使ってしまう。

func copyFile(from string, to string) error {
	r, err := ioutil.ReadFile(from)
	if err != nil {
		return err
	}

	return ioutil.WriteFile(to, r, 0666)
}

良い例

io.Copyを使うとメモリ効率が良い。

func copyFile(from string, to string) error {
	r, err := os.Open(from)
	if err != nil {
		return err
	}
	defer r.Close()

	w, err := os.Create(to)
	if err != nil {
		return err
	}
	defer w.Close()

	_, err = io.Copy(w, r)

	return err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment