在 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...
但被编译器拒绝的东西。
在迭代器出现之前,是的,您编写的代码是惯用的。我将其打包以供重用,在我工作的代码库中如下所示:
// 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