String 有没有一种方法可以实现Sprintf结果的倒数

String 有没有一种方法可以实现Sprintf结果的倒数,string,go,printf,String,Go,Printf,因此,我使用 姓名:=蝙蝠侠 年龄:=38 nameAndAge=fmt.Sprintf%s%d,姓名,年龄 在另一个函数中,我可以访问变量name和age。现在我想找回我在Sprintf中使用的两个变量。我可以考虑的一种不经意的方法是基于分隔符拆分它并创建变量。我想知道是否有任何功能可用于执行此操作 像 变量名称字符串 变量年龄整数 //分离器在这里吗 fmt.ReverseSprintfnameAndAge,,姓名,年龄 谢谢你的帮助。从某种程度上说,这是可能的,但这是不可能的。从以下文件包

因此,我使用

姓名:=蝙蝠侠 年龄:=38 nameAndAge=fmt.Sprintf%s%d,姓名,年龄 在另一个函数中,我可以访问变量name和age。现在我想找回我在Sprintf中使用的两个变量。我可以考虑的一种不经意的方法是基于分隔符拆分它并创建变量。我想知道是否有任何功能可用于执行此操作

变量名称字符串 变量年龄整数 //分离器在这里吗 fmt.ReverseSprintfnameAndAge,,姓名,年龄
谢谢你的帮助。

从某种程度上说,这是可能的,但这是不可能的。从以下文件包中报价:

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)
它可以在以下位置进行尝试:

我写这篇文章在某种程度上是因为你的例子很简单。如果您的姓名中包含空格,则上述示例将中断:

name := "Batman Robin"
// The rest is the same
产出将是:

Batman Robin 38
error expected integer
Batman 0

这是因为在我们的格式字符串中,我们使用了空格来分隔输入,如果输入中包含空格本身,则反转过程无法分辨出差异。此外,扫描功能还将输入中的换行符视为空格,以及其他区别。

在某种程度上,这是可能的。从以下文件包中报价:

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)
它可以在以下位置进行尝试:

我写这篇文章在某种程度上是因为你的例子很简单。如果您的姓名中包含空格,则上述示例将中断:

name := "Batman Robin"
// The rest is the same
产出将是:

Batman Robin 38
error expected integer
Batman 0
这是因为在我们的格式字符串中,我们使用了空格来分隔输入,如果输入中包含空格本身,则反转过程无法分辨出差异。此外,扫描函数还将输入中的换行符视为空格,以及其他区别