Я пытаюсь преобразовать строку, возвращенную из flag.Arg(n)
в int
. Какой идиоматический способ сделать это в Go?
string
go
type-conversion
Мэтт Джойнер
источник
источник
func main() { ... }
не принимает аргументов и не возвращает значения. Используйте функциюos
пакета,Exit
напримерos.Exit(2).
panic(err)
Преобразование простых строк
Самый простой способ - использовать
strconv.Atoi()
функцию.Обратите внимание, что есть много других способов. Например,
fmt.Sscan()
иstrconv.ParseInt()
которые дают большую гибкость, так как вы можете указать базу и битовый размер, например. Также как отмечено в документацииstrconv.Atoi()
:Вот пример использования упомянутых функций (попробуйте на Go Playground ):
Вывод (если вызывается с аргументом
"123"
):Разбор пользовательских строк
Существует также удобство,
fmt.Sscanf()
которое дает еще большую гибкость, так как с помощью строки формата вы можете указать числовой формат (например, ширину, основание и т. Д.) Вместе с дополнительными дополнительными символами на входеstring
.Это отлично подходит для разбора пользовательских строк, содержащих число. Например, если ваш ввод предоставлен в форме,
"id:00123"
где у вас есть префикс,"id:"
а число фиксировано 5 цифрами, дополненными нулями, если короче, это очень легко разобрать, как это:источник
ParseInt
?strconv.ParseInt()
ссылку , и вы увидите сразу:ParseInt(s string, base int, bitSize int)
. Итак, это основа: «ParseInt интерпретирует строку s в заданной базе (от 2 до 36)»int
требуется иstrconv.ParseInt()
используется, необходимо ручное преобразование типа (изint64
вint
).Вот три способа разбить строки на целые числа, от самого быстрого времени выполнения до самого медленного:
strconv.ParseInt(...)
быстрыйstrconv.Atoi(...)
все еще очень быстроfmt.Sscanf(...)
не очень быстро, но наиболее гибкийВот тест, который показывает использование и пример времени для каждой функции:
Вы можете запустить его, сохранив как
atoi_test.go
и запустивgo test -bench=. atoi_test.go
.источник
Попробуй это
источник
Если вы контролируете входные данные, вы можете использовать мини-версию
самый быстрый вариант (при необходимости напишите чек). Результат:
источник