Go channel: использовать данные из канала, но ничего не передавать на канал

Обтекаемый тег изображения с текстом div и alt не будет переполняться за пределы.

div {
  width:100px;
  height:100px;
}

img{
  border:1px solid #ff0000;
  overflow:hidden;
}
<div> 
  <img src="http://www.example.com/broken.jpg" alt="This is a long text which overflows bounds of image">
</div>

2
задан Trần Kim Dự 19 January 2019 в 10:05
поделиться

1 ответ

Спецификация языка программирования Go

Закрыть

После вызова close и после получения любых ранее отправленных значений, Операции приема возвращают нулевое значение для типа канала без блокировки. Многозначная операция приема возвращает полученное значение вместе с указанием того, закрыт ли канал.


Вы считаете нулевые значения.

Например,

package main

import (
    "fmt"
)

func main() {

    c1 := make(chan interface{})
    close(c1)
    c2 := make(chan interface{})
    close(c2)

    var c1Count, c2Count int
    var z1Count, z2Count int
    for i := 1000; i >= 0; i-- {
        select {
        case z1 := <-c1:
            c1Count++
            if z1 == nil {
                z1Count++
            }

        case z2 := <-c2:
            c2Count++
            if z2 == nil {
                z2Count++
            }
        }

    }
    fmt.Printf("c1Count: %d\nc2Count: %d\n", c1Count, c2Count)
    fmt.Printf("z1Count: %d\nz2Count: %d\n", z1Count, z2Count)
}

Детская площадка: https://play.golang.org/p/tPRkqXrAFno

Вывод:

c1Count: 511
c2Count: 490
z1Count: 511
z2Count: 490

Спецификация языка программирования Go

Для операторов

Для операторов с диапазон range

Для каналов получаемые значения итерации являются последовательными значениями, посылаемыми в канале до тех пор, пока канал не будет закрыт. Если канал ноль, выражение диапазона блокируется навсегда.

Close полезен для оператора for с предложением range.

0
ответ дан peterSO 19 January 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: