Меня попросили найти ошибку в каком-то коде Go, и я озадачен тем, какой должна быть эта очевидная ошибка.Меня спросили следующее:
Что не так с этим кодом?Он неполный, но фрагмента должно быть достаточно, чтобы обнаружить ошибку.Как бы вы это исправить?Какие еще улучшения вы можете предложить?
Попробовал различные решения для кодирования на примере и нашел ошибку, но не вижу очевидной ошибки в коде, потому что я могу заставить этот код работать нормально (в зависимости от того, как я кодирую)для этого).Я сказал им, что код не ожидает рабочих процессов и не проверяет их завершение перед закрытием канала.Я заявил, что код слишком абстрактен, чтобы сказать наверняка, и это зависит от цели кода, но что его можно заставить работать нормально (не то, чтобы я его так кодировал, конечно).
const nworkers = 5
type Task struct {
...
}
func worker(queue chan *Task) {
for task := range queue {
task.execute()
}
}
func main() {
tasks := getTasks()
queue := make(chan *Task, nworkers)
for i := 0; i < nworkers; i++ {
go worker(queue)
}
for i := 0; i < len(tasks); i++ {
queue <- tasks[i]
}
close(queue)
}
/*
Again, I had created some code to populate the missing code areas and
added wait to the workers and checks to ensure they completed, passing
the structure to the function call, added code to populate the struct
data and passed the data with queue <- &tasks[i] to reference (in how I
was doing it with one example) and so on. I literally can't see anything
obvious as per the bug in the code example if I fill in some blanks to
make it work).
*/
Никаких конкретных ожидаемых результатов, просто пытаюсь найти эту ошибку, чтобы я мог извлечь уроки из этого вопроса и углубиться в язык Go.Может кто-нибудь определить, что должно быть очевидной ошибкой, и объяснить, где / что ошибка?