Golang Go语言中 Printf 输出的字符串末尾被自动增加了一个百分号,如何去除?

发布于 1周前 作者 vueper 来自 Go语言
fmt.Printf("请输入开始时间和结束时间。格式: %s startDate=2017-12-07 endDate=2017-12-10", os.Args[0])

期望的输出内容为:

请输入开始时间和结束时间。格式: ./mongo2mysql startDate=2017-12-07 endDate=2017-12-10

但是实际上在 Linux 和 Mac 的终端输出的内容都是:

请输入开始时间和结束时间。格式: ./mongo2mysql startDate=2017-12-07 endDate=2017-12-10%

如何把末尾的百分号去掉?


Golang Go语言中 Printf 输出的字符串末尾被自动增加了一个百分号,如何去除?

更多关于Golang Go语言中 Printf 输出的字符串末尾被自动增加了一个百分号,如何去除?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

13 回复

linux 实测没有百分号。

更多关于Golang Go语言中 Printf 输出的字符串末尾被自动增加了一个百分号,如何去除?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


mac 实测没有百分号

这各百分号是终端显示的换行吧

这个貌似与终端有关,我在用 zsh 时就发现运行程序时如果输出末尾没有新的空行,会打出一个 % 作为提示。你可以尝试用输出重定向 > 将标准输出放到一个文件里,再打开看看是不是还有 %

我猜是终端检测到没有换行符所以现实的那个 %

你加个 \n 试试

zsh 是个 shell,并不是终端

这个 % 是你的终端的 prompt。
原因是你这个少输出了个回车,所以输出内容跟新的 prompt 在同一行了。

这里应该是:

fmt.Printf(“请输入开始时间和结束时间。格式: %s startDate=2017-12-07 endDate=2017-12-10\n”, os.Args[0])

确实我有 zsh。可能是这个问题。

在Go语言中,使用fmt.Printf函数进行格式化输出时,如果输出的字符串末尾被自动增加了一个百分号(%),这通常不是Printf函数本身的行为。fmt.Printf是根据格式化动词(如%d%s等)来解析并输出对应的数据,它不会自动在输出字符串末尾添加任何字符。

如果你遇到了这种情况,很可能是以下几种原因之一:

  1. 格式化字符串错误:检查你的格式化字符串,确保没有多余的%符号。例如,fmt.Printf("Hello, %s%", "world")会导致输出Hello, world%

  2. 字符串拼接问题:如果你是通过字符串拼接的方式构建格式化字符串,确保拼接过程中没有引入不必要的%

  3. 变量或表达式错误:有时变量或表达式的值可能包含意外的字符,包括%。检查相关变量的值。

为了解决这个问题,你可以:

  • 仔细检查并修正格式化字符串。
  • 确保所有变量和表达式的值符合预期。
  • 使用fmt.Sprintf先生成字符串,再打印,这样便于调试和查看中间结果。例如:
s := fmt.Sprintf("Hello, %s", "world")
fmt.Println(s)  // 输出:Hello, world

如果以上方法仍然无法解决问题,请提供更详细的代码示例,以便进一步分析。

回到顶部