所以,我用
name := "Batman"
age := 38
nameAndAge = fmt.Sprintf("%s %d", name, age)
在另一个函数中,我可以访问变量 nameAndAge
. 现在我想找回我在 Sprintf
. 我能想到的一个忘我的方法就是根据分隔符进行分割,然后创建变量。我想知道是否有任何函数可以用来做这件事?
比如说
var name string
var age int
// " " is the separator here
fmt.ReverseSprintf(nameAndAge, " ", name, age)
谢谢你的帮助。
在某种程度上,它是可能的,有 fmt.Sscanf()
为此。引自 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)
它的输出(在 去游乐场):
Batman 38
Batman 38
我写 "在某种程度上 "是因为你的例子很简单。如果你的 name
会包含空格,上面的例子就会被打破。
name := "Batman Robin"
// The rest is the same
输出将是:
Batman Robin 38
error expected integer
Batman 0
这是因为在我们的格式中 string
我们用空格来分隔输入,如果输入中本身就包含了空格,那么反转过程中就无法分辨出区别。另外扫描函数也会把输入中的换行当作空格,还有其他的区别。