将切片的所有项目添加到通道中

dot*_*vav 7 channel go slice

在 Go 中,是否有比以下更惯用的方法将数组/切片的所有元素添加到通道中?

ch := make(chan string)
values := []string{"lol", "cat", "lolcat"}

go func() {
    for _, v := range values {
        ch <- v
    }
}()
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似ch <- values...但被编译器拒绝的东西。

CAF*_*FxX 1

迭代器出现之前,是的,您编写的代码是惯用的。我将其打包以供重用,在我工作的代码库中如下所示:

// ToChan returns a channel containing all elements in the slice s.
// The channel is closed when all elements are consumed from the channel.
func ToChan[T any](s []T) <-chan T {
    ch := make(chan T, len(s))
    for _, e := range s {
        ch <- e
    }
    close(ch)
    return ch
}
Run Code Online (Sandbox Code Playgroud)

https://go.dev/play/p/c5v4df_M1IG