Создать канал из массива - PullRequest
0 голосов
/ 02 июля 2018

Какой самый простой способ добавить все элементы массива в канал?

Я могу сделать это:

elms := [3]int{1, 2, 3}
c := make(chan int, 3)

for _, e := range elms {
    c <- e
}

Но мне интересно, есть ли для этого синтаксический сахар?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Код должен быть правильным, поддерживаемым, надежным, достаточно эффективным и, самое главное, читаемым.

По своему дизайну Go прост, но мощен. Каждый может прочитать и запомнить спецификацию: Спецификация языка программирования Go . Вы можете научиться идти за день или около того. Простота делает код Go очень читабельным.

Сложность синтаксического сахара вызывает когнитивную перегрузку. После совместной работы с Бьярном Страуструпом (C ++) и Гвидо ван Россумом (Python) авторы Go сознательно избегали синтаксического сахара.

Прочитайте недавние жалобы Бьярна Страуструпа на сложность C ++: Помните о Васе! .

Легко увидеть, что делает этот код:

package main

func main() {
    elms := [3]int{1, 2, 3}
    c := make(chan int, len(elms))
    for _, elm := range elms {
        c <- elm
    }
}
0 голосов
/ 02 июля 2018

In Golang Spec на каналах Он определяется как: -

Один канал может использоваться в операциях отправки, операциях приема, и вызывает встроенные функции cap и len на любое количество Горутины без дальнейшей синхронизации.

Существует еще один способ назначить каналу полный срез или массив как:

func main() {
    c := make(chan [3]int)

    elms := [3]int{1, 2, 3}

    go func() {
        c <- elms
    }()

    for _, i := range <-c {
        fmt.Println(i)
    }
}

Проверьте рабочий пример на Go Playground

Информацию о каналах смотрите по этой ссылке https://dave.cheney.net/tag/golang-3

...