go - 在 Go 中忽略 printf 值

标签 go printf

是否有一种方法可以在格式字符串中编写动词,即使向 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/

相关文章:

Bash: "printf %q $str"在脚本中删除空格。 (备择方案?)

rest - 在 Golang 中获取动态 sql

Go嵌入式自定义接口(interface)

vim - 即使安装了 vim-gocode,我也无法自动完成我的 Go 代码

Golang 从内存中的二进制数据执行子进程

c - printf 在 VS2013 中不使用 __cdecl

go - 处理从发布请求到 Json 的响应

c - 如何打印 (void *) 字符串中的单词

c - 为什么这个 C 程序在小数值后打印 %?

c - 使用包含 union 和类型成员的结构