В некоторой степени это возможно, для этого есть fmt.Sscanf()
. Цитирование из пакета do c из fmt
: сканирование :
Scanf, Fscanf и Sscanf анализируют аргументы в соответствии со строкой формата, аналогичной Printf.
См. Этот пример:
name := "Batman"
age := 38
output := fmt.Sprintf("%s %d", name, age)
fmt.Println(output)
var name2 string
var age2 int
if _, err := fmt.Sscanf(output, "%s %d", &name2, &age2); err != nil {
fmt.Println("error", err)
}
fmt.Println(name2, age2)
Вывод (попробуйте на игровой площадке Go ):
Batman 38
Batman 38
Я написал «до некоторой степени», потому что ваш пример был довольно прост. Если бы ваш name
содержал пробелы, вышеприведенный пример сломался бы:
name := "Batman Robin"
// The rest is the same
Вывод будет:
Batman Robin 38
error expected integer
Batman 0
Причина этого заключается в том, что в нашем формате string
мы использовали пространство для разделения входных данных, и если само пространство содержится во входных данных, процесс реверса не может определить разницу. Кроме того, функции сканирования обрабатывают символы новой строки во входных данных как пробелы, среди прочих различий.