所以,我创建了一个字符串变量使用
name := "Batman"
age := 38
nameAndAge = fmt.Sprintf("%s %d", name, age)
Run Code Online (Sandbox Code Playgroud)
在另一个函数中,我可以访问变量nameAndAge。现在我想取回我在Sprintf. 我能想到的一种不经意的方法是根据分隔符拆分它并创建变量。我想知道是否有任何功能可以做到这一点?
喜欢,
var name string
var age int
// " " is the separator here
fmt.ReverseSprintf(nameAndAge, " ", name, age)
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助。
在某种程度上它是可能的,这是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)
Run Code Online (Sandbox Code Playgroud)
它输出(在Go Playground上尝试):
Batman 38
Batman 38
Run Code Online (Sandbox Code Playgroud)
我写“在某种程度上”是因为你的例子很简单。如果您name将包含空格,则上面的示例将中断:
name := "Batman Robin"
// The rest is the same
Run Code Online (Sandbox Code Playgroud)
输出将是:
Batman Robin 38
error expected integer
Batman 0
Run Code Online (Sandbox Code Playgroud)
这样做的原因是因为在我们的格式中string我们使用空格来分隔输入,如果空格本身包含在输入中,则逆向过程无法区分。此外,扫描功能将输入中的换行符视为空格,以及其他差异。