Когда сигнал о завершении работы будет получен, функция должна в выходной (возвращенный) канал отправить сумму полученных чисел.
func calculator(arguments <-chan int, done <-chan struct{}) <-chan int {
output := make(chan int)
go func(output chan<- int) {
defer close(output)
var x int
for {
select { // Оператор select
case arg, ok := <-arguments: // Ждет, когда проснется гофер
if !ok { // Канал закрыт, больше из него читать не надо
arguments = nil // Из nil канала чтение уже не сработает, select будет ждать только сигнала done
} else {
x += arg
fmt.Println(x)
}
case <-done: // Ждет окончания времени
output <- x
return
}
}
}(output)
return output
}
output := make(chan int, 1)
case <-done: // Ждет окончания времени
Loop2:
for {
select {
case arg, ok := <-arguments:
if !ok {
break Loop2
}
x += arg
fmt.Println(x)
default:
break Loop2
}
}
break Loop
package main
import (
"fmt"
)
func main() {
fmt.Println("TEST BUILDS FOR RUN LINUX")
}
required
проверяет для массива, что значение - неnil
(https://github.com/go-playground/validator/blob/ma...). Если нужно проверить, что массив непустой, должно сработатьrequired,min=1