Преобразование простых строк
Самый простой способ - использовать функцию strconv.Atoi()
.
Обратите внимание, что есть много других способов. Например, fmt.Sscan()
и strconv.ParseInt()
, которые дают большую гибкость, так как вы можете, например, указать основание и размер в битах. Также, как отмечено в документации strconv.Atoi()
:
Atoi эквивалентен ParseInt (s, 10, 0), преобразованному в тип int.
Вот пример использования упомянутых функций (попробуйте на Go Playground ):
flag.Parse()
s := flag.Arg(0)
if i, err := strconv.Atoi(s); err == nil {
fmt.Printf("i=%d, type: %T\n", i, i)
}
if i, err := strconv.ParseInt(s, 10, 64); err == nil {
fmt.Printf("i=%d, type: %T\n", i, i)
}
var i int
if _, err := fmt.Sscan(s, &i); err == nil {
fmt.Printf("i=%d, type: %T\n", i, i)
}
Вывод (если вызывается с аргументом "123"
):
i=123, type: int
i=123, type: int64
i=123, type: int
Разбор пользовательских строк
Существует также удобный fmt.Sscanf()
, который дает еще большую гибкость, так как с помощью строки формата вы можете указать числовой формат (например, ширину, основание и т. Д.) Вместе с дополнительными дополнительными символами на входе string
.
Это отлично подходит для разбора пользовательских строк, содержащих число. Например, если ваш ввод представлен в виде "id:00123"
, где у вас есть префикс "id:"
, а число является фиксированным 5 цифрами, дополненное нулями, если короче, это очень легко разбирается следующим образом:
s := "id:00123"
var i int
if _, err := fmt.Sscanf(s, "id:%5d", &i); err == nil {
fmt.Println(i) // Outputs 123
}