Ошибка — часть результата
Функция разбора должна вернуть либо данные, либо объяснимую причину отказа. Проверяйте не только возможность преобразовать число, но и допустимость самого значения.
package main
import (
"fmt"
"strconv"
)
func parsePort(text string) (int, error) {
port, err := strconv.Atoi(text)
if err != nil {
return 0, fmt.Errorf("invalid port %q: %w", text, err)
}
if port < 1 || port > 65535 {
return 0, fmt.Errorf("port out of range: %d", port)
}
return port, nil
}
func main() {
port, err := parsePort("8080")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("port:", port)
}
Функция, которая может не справиться, возвращает значение ошибки. Вызывающий код решает, как её обработать. Проверяйте формат и ограничения отдельно; тесты должны покрывать обычный путь и отказные случаи.