Оператор "большого переключателя", которого вы хотите избежать, уже записан в стандартной библиотеке. Используйте пакет fmt
для простого разбора примитивных значений из строк, в частности функций fmt.Sscan()
и fmt.Sscanf()
.
fmt.Sscan()
требуется строковое значение для анализа чего-либо и адрес переменной, в которую будет помещено проанализированное значение. Тип указанной переменной также определяет, что и как анализировать в строке. fmt.Sscan()
вернет количество успешно проанализированных значений и необязательную ошибку (если что-то пойдет не так).
Простой пример:
var i int
if _, err := fmt.Sscan("12", &i); err != nil {
fmt.Println("Error:", err)
}
fmt.Println(i)
var f float32
if _, err := fmt.Sscan("12.2", &f); err != nil {
fmt.Println("Error:", err)
}
fmt.Println(f)
Вывод (попробуйте на Go Playground ):
12
12.2
Также обратите внимание, что вы можете проанализировать несколько значений за один шаг с помощью fmt.Sscan()
, например:
var i int
var f float32
fmt.Println(fmt.Sscan("12 12.2", &i, &f))
fmt.Println(i, f)
Будет напечатано (попробуйте на Go Playground ):
2 <nil>
12 12.2
Первая строка содержит возвращаемые значения fmt.Sscan()
: сообщает, что проанализировала 2 значения и не вернула ошибку (nil
error). Вторая строка содержит проанализированные значения i
и f
.
Для получения дополнительных опций читайте: Преобразовать строку в целочисленный тип в Go?