Từ khoá defer trong Go
TIL
641
Go
39
golang
38
White

Huy Trần viết ngày 03/06/2016

defer là gì? Tại sao phải dùng defer?

Trong Golang có một lệnh khá hay đó là defer, khi một câu lệnh được đặt sau từ khoá defer, thì nó sẽ được thực thi khi hàm chứa nó kết thúc. Cho dù bạn viết nó ở bất kì đâu.

Sau đây là một vài ví dụ về cách sử dụng defer:

Ví dụ 1: Cách hoạt động của defer

func Hello() {
    defer fmt.Println("World")
    fmt.Println("Hello")
}

func main() {
    fmt.Println("Say")
    Hello()
}

Output của đoạn code trên sẽ là:

Say
Hello
World

Tức là, khi gặp lệnh defer thì chương trình sẽ bỏ qua, chưa thực thi nó, tiếp tục thực thi các câu lệnh đằng sau cho đến khi thoát khỏi "khối lệnh bao quanh nó", mà ở đây là hàm Hello() thì câu lệnh trong defer mới được thực hiện.

Ví dụ 2: Dùng defer để tự đóng kết nối đến database khi chương trình kết thúc

func main() {
    db, err := leveldb.OpenFile("/db/data", nil)
    defer db.Close()

    // Do thing A
    ...
    // Do thing B
    ...
}

Trong ví dụ trên, khi bạn vừa khởi tạo xong đối tượng db để kết nối tới database, bạn có thể gọi lệnh defer db.Close() để "nhắc" Golang răng bạn muốn chạy câu lệnh này khi hàm main() kết thúc.

Ví dụ 3: Trường hợp nhiều lệnh defer được gọi liên tiếp
Khi chúng ta gọi nhiều lần defer, Golang sẽ xử lý bằng cơ chế stack, lệnh nào vào trước thì chạy sau (first in last out)

func main() {
    fmt.Println("counting")

    for i := 0; i < 10; i++ {
        defer fmt.Println(i)
    }

    fmt.Println("done")
}

Output của đoạn code trên sẽ là:

counting
done
9
8
7
6
5
4
3
2
1
0

Xem thêm về defer tại đây: https://blog.golang.org/defer-panic-and-recover

Huy Tran 30-05-2016

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Huy Trần

116 bài viết.
1803 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
170 46
Tại sao phải viết blog kĩ thuật? Có rất nhiều bài viết trên mạng nói về vấn đề tại sao một lập trình viên nên thường xuyên viết các bài blog kĩ thu...
Huy Trần viết hơn 3 năm trước
170 46
White
151 39
(Ảnh) Tiếp tục sêri (Link) lần này, chúng ta sẽ cùng tìm hiểu và mô phỏng lại một chức năng mà mọi người đang bắt đầu sử dụng hằng ngày, đó là chứ...
Huy Trần viết hơn 2 năm trước
151 39
White
109 17
Phần 1: Tự truyện Tui và Toán đã từng là hai kẻ thù không đội trời chung trong suốt hơn mười lăm năm ròng rã. Ngay từ ánh nhìn đầu tiên đã ghét nh...
Huy Trần viết hơn 2 năm trước
109 17
Bài viết liên quan
White
16 1
Crawl dữ liệu Crawl là một vấn đề hay gặp trong quá trình làm software. Ví dụ lấy tin tức, tin giảm giá, vé xem phim... là những dạng của crawl. Mộ...
Thach Le viết gần 3 năm trước
16 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
116 bài viết.
1803 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!