2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

眺めて覚えるGo言語 その9 deferの書き方

Posted at

#deferは、遅延という意味だが分かりにくい。
###眺めるための例題

f7.go
package main
import (
	"fmt"
	"time"
)
func main() {
	defer fmt.Println("全部終了しました。")
	for i:=0;i<10;i++{
		time.Sleep(1)
		fmt.Println("i=",i)
	}
}
//実行結果
>go run f7.go
i= 0
i= 1
i= 2
i= 3
i= 4
i= 5
i= 6
i= 7
i= 8
i= 9
全部終了しました

最初に書いた **defer fmt.Println("全部終了しました。")**は、
for以降のステートメント以降に遅延されたことがわかる。

実際の場面

f8.go
package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)
func main() {
    fp, err := os.Open("d:\\00data\\test_utf20.csv")
	if err != nil {panic(err)}
	defer fp.Close()
	reader := bufio.NewReaderSize(fp, 4096)
	for {
			line, _, err := reader.ReadLine()
			fmt.Println(string(line))
			if err == io.EOF {
				break
			} else if err != nil {panic(err)}
	}
}

上記のプログラムを眺めてみるとOpenしてdefer 付きのCloseをしている。
この表記は、もしファイルやio操作中に何らかのエラーが起きたときにcloseしてくれる。

#注意 皆さんは、エラーを起こすためにUsbFlashを引き抜かないでください。b壊れます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?