# TIL -- Golang
TIL
737
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

7 bài viết.
46 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
22 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 gần 3 năm trước
22 2
White
21 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 3 năm trước
21 12
White
13 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 gần 3 năm trước
13 1
Bài viết liên quan
White
0 4
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 hơn 1 năm trước
0 4
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 11 tháng trước
2 0
White
23 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 3 năm trước
23 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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