Từ khoá defer trong Go
TIL
499
Go
41
golang
39
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

102 bài viết.
1440 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
146 43
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 2 năm trước
146 43
White
143 37
(Ả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 1 năm trước
143 37
White
97 16
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 gần 2 năm trước
97 16
Bài viết liên quan
White
17 0
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 2 năm trước
17 0
White
41 7
Là một người thường xuyên đọc Quora, có một điểm cá nhân tôi thấy rất ấn tượng ở quora chính là khả năng autocomplete với tốc độ ánh sáng. (Ảnh) ...
huydx viết 2 tháng trước
41 7
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
1440 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á!