В этом примере вызываем функцию getOperations, которая возвращает срез типа float32. Далее мы хотим вызывать функцию handle только в том случае, если этот срез содержит элементы. Вот первая (ошибочная) версия кода этих действий:
func handleOperations(id string) {
operations := getOperations(id)
if operations != nil { Проверяется, является ли срез operations нулевым
handle(operations)
}
}
func getOperations(id string) []float32 {
operations := make([]float32, 0) Инициализируется срез operations
if id == "" {
return operations Возвращается operations, если заданный id пуст
}
// Добавление элементов к operations
return operations
}
Мы определяем, есть ли в срезе элементы, проверяя, не является ли срез operations нулевым. Но у этого кода есть проблема: функция getOperations никогда не возвращает нулевой срез, она возвращает пустой срез. Поэтому значение проверки operations != nil всегда будет true.
100 ошибок Go и как их избежать
·
Тейва Харшани