LeGE C ссылается на это в своем комментарии.
Копаясь дальше, вы найдете этот бит в клиенте. go
func (call *Call) done() {
select {
case call.Done <- call:
// ok
default:
// We don't want to block here. It is the caller's responsibility to make
// sure the channel has enough buffer space. See comment in Go().
if debugLog {
log.Println("rpc: discarding Call reply due to insufficient Done chan capacity")
}
}
}
Из того, что вы можете видеть здесь, что библиотека ожидает, что вызов будет полностью асинхронным. Это означает, что канал done должен обладать достаточной пропускной способностью, чтобы полностью разделить два процесса (т. Е. Вообще не блокировать). неблокирующая работа канала.