Một cách tốt để suy nghĩ của các kênh truyền hình là như ống với hai đầu. Một đầu là nơi các sự kiện chảy vào và nơi khác mà chúng chảy ra. Vì vậy, tuyên bố một kênh, ví dụ:
var c = make(chan int)
tạo toàn bộ kênh - tức là với cả hai đầu. Ngược lại,
func consume(c <-chan int) {
...
}
định nghĩa một hàm với một tham số kênh đầu vào - tức là khi kết thúc có thể đọc được của một kênh, và
func generate(c chan<- int) {
...
}
định nghĩa một hàm với tham số đầu ra kênh - tức là khi kết thúc ghi của một kênh . Cả hai chức năng này có thể có toàn bộ kênh truyền qua như thông số thực tế của chúng, hoặc chỉ là kết thúc mà chúng cần.
Nguyên tắc chung tương tự áp dụng khi kênh được sử dụng làm biến cục bộ hoặc dưới dạng trường trong cấu trúc.
Thực hành tốt là sử dụng cú pháp cuối kênh bất cứ khi nào có thể, bởi vì trình biên dịch sẽ có thể kiểm tra kỹ hơn rằng bạn đã viết những gì bạn dự định.
Điều thú vị là ngôn ngữ lập trình occam cũng có cú pháp tương đương để đánh dấu phần cuối của kênh.
Nguồn
2012-12-28 23:59:17
@ david-faux, cũng lưu ý rằng bạn chỉ có thể sử dụng 'tick: = time.Tick (1e8)' và có trình biên dịch lấy được loại chính xác cho 'tick' tự động. Cách tiếp cận này cũng làm giảm đáng kể sự lộn xộn. – kostix