Я написал небольшую программу для практики го канала.
package main
import (
"log"
"strconv"
)
var MaxOutstanding int = 1
var channelSize int = 10
var sem = make(chan int, MaxOutstanding)
type Request struct {
command string
data string
}
func process(req *Request) {
log.Println(req)
}
func serve(reqs chan *Request) {
for req := range reqs {
sem <- 1
go func() {
process(req)
<-sem
}()
}
}
func main() {
reqs := make(chan *Request, channelSize)
for i := 0; i < channelSize; i++ {
req := &Request{"start", strconv.Itoa(i)}
reqs <- req
}
close(reqs)
serve(reqs)
}
При печати
2018/12/02 16:52:30 &{start 1}
2018/12/02 16:52:30 &{start 2}
2018/12/02 16:52:30 &{start 3}
2018/12/02 16:52:30 &{start 4}
2018/12/02 16:52:30 &{start 5}
2018/12/02 16:52:30 &{start 6}
2018/12/02 16:52:30 &{start 7}
2018/12/02 16:52:30 &{start 8}
2018/12/02 16:52:30 &{start 9}
Поэтому & {start 0} не печатается.Почему этого не хватает?