# TIL -- Golang
TIL
595
White

Nguyễn Gia viết ngày 06/05/2016

20160506

Goroutine

Nếu goroutine đang chiếm quyền xử lí ko buông, thì các goroutine khác không được chạy. Cách đơn giản nhất để buông quyền là dùng sleep().

Select

Block gouroutine đến khi có tín hiệu vào channel

Channel

Goroutine không được chạy nếu 1 kênh không thông cả 2 đầu. Ví dụ 1 goroutine send tín hiệu vào 1 channel mà goroutine receive không còn thì goroutine send sẽ bị block.

Ticker

Stop ticker thì channel vẫn không bị close, dẫn đến leak.
Như ví dụ bên dưới thì sẽ không thoát được for loop, không in ra được "Reachable?"

func main() {
    ticker := time.NewTicker(10 * time.Millisecond)
    go func() {
        for t := range ticker.C {
            fmt.Println("Tick at", t)
        }
        fmt.Println("Reachable?")
    }()

    time.Sleep(35 * time.Millisecond)
    ticker.Stop()
    time.Sleep(100 * time.Millisecond)
}

Để thoát khỏi for loop thì có thể dùng thêm 1 channel nữa.

func main() {
    ticker := time.NewTicker(10 * time.Millisecond)
    stop := make(chan bool)
    go func() {
    loop:
        for {
            select {
            case t := <-ticker.C:
                fmt.Println("Tick at", t)
            case <-stop:
                break loop
            }
        }
        fmt.Println("Reachable!")
    }()

    time.Sleep(35 * time.Millisecond)
    ticker.Stop()
    close(stop)
    time.Sleep(100 * time.Millisecond)
}
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

Nguyễn Gia

6 bài viết.
44 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
18 2
Intro Trong các coding contest, khi mà kết quả là một số rất lớn (n hoặc tổ hợp), không dùng kiểu dữ liệu primitive để lưu được thì đề bài thường ...
Nguyễn Gia viết hơn 1 năm trước
18 2
White
17 12
Cảm xúc khi học javascript y hệt như bài viết này nên mình dịch lại cho vui. Link gốc: https://hackernoon.com/howitfeelstolearnjavascriptin2016d3a7...
Nguyễn Gia viết hơn 1 năm trước
17 12
White
12 1
Thi thoảng la liếm github hay gặp một số từ viết tắt mà chẳng hiểu nghĩa là gì nên tổng hợp vào đây. | Từ viết tắt | Nghĩa | | |::| |AFAICT|As far...
Nguyễn Gia viết hơn 1 năm trước
12 1
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 tháng trước
0 2
White
19 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 2 năm trước
19 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 1 năm trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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