是否有一种方法可以在格式字符串中编写动词,即使向 Printf/Sprintf/Fprintf 提供了某些值,也不会输出任何内容?换句话说,是否存在此代码不输出任何内容的 s
值?
fmt.Printf(s, 42)
在 C 中,答案很简单:空字符串,因为 the superfluous value is ignored 。在 Go 中,空格式字符串会导致输出 %!(EXTRA int=42)
。我认为这是一件好事,因为格式字符串很可能是错误的。在这种情况下,Python 甚至会抛出“TypeError:并非所有参数在字符串格式化期间都已转换”。但如果我们真的想吞噬、忽略、跳过、取消这些值,我们如何才能让 Printf 相信我们的良好意图呢?
如果值是字符串,很简单:截断为零:
fmt.Printf("nothing%.0s here", "foul")
我在挖掘 a bash version of my question 后意识到,你甚至可以省略该动词中的 0 。但如果该值是数字怎么办?
如果您想知道,为什么不简单地省略多余的值:上下文是只能触及格式字符串,作为函数的参数。函数体向格式提供一些预定类型的值,例如 this simplified playground example 。通常,传入的格式想要表示值,但有时您可能想忽略它。当然,该函数可以成长并接受一个接口(interface)而不是格式字符串,但我只是想知道 Printf 是否可以像在 C 中一样自行完成它。
最佳答案
这可能不完全是您正在寻找的内容,但值得查看 text/template
包。然后,您可以使用 Parse("{{.Name}} items are made of {{.Material}}")
定义一个模板,并传递给 Execute
一个 map[string]string
包含键“Name”
和“Material”
。这样做的另一个优点是格式字符串还可以安排值的输出顺序。
关于go - 在 Go 中忽略 printf 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204322/