fmt.Println("a","b")
我想在没有空格填充的情况下打印两个字符串,即" ab",但上面会打印" a b"。
我是否只是切换到使用Printf
?
fmt.Printf("%s%s\n","a","b")
答案 0 :(得分:12)
如果您制作了最后一个元素" \ n" 如果您不习惯printf样式格式化,也会更容易阅读。
请参阅此处on play
fmt.Println("a","b")
fmt.Print("a","b","\n")
fmt.Printf("%s%s\n","a","b")
将打印:
a b
ab
ab
答案 1 :(得分:3)
可以在doc:
中找到Println使用其操作数和写入的默认格式进行格式化 到标准输出。 操作数和a之间总是添加空格 附加换行符。它返回写入的字节数和任何字节数 遇到写错误。
所以你需要做你已经说过的事情,或者你可以在打印前连接字符串:
fmt.Println("a"+"b")
根据您的用例,您可以使用strings.Join(myStrings, "")
来实现此目的。
答案 2 :(得分:1)
Println依赖于doPrint(args, true, true)
,其中第一个参数为addspace
,第二个参数为addnewline
。所以Prinln ith多个参数将始终打印空间。
似乎没有doPrint(args, false, true)
的召唤,这就是你想要的。
Printf
可能是一个解决方案Print
,但您应该添加换行符。
答案 3 :(得分:0)
您必须使用基准来比较效果,但我宁愿使用以下内容而不是Printf
:
fmt.Println(strings.Join([]string{"a", "b"}, ""))
请记住import "strings"
,并查看strings.Join
文档以获取解释。
答案 4 :(得分:0)
我项目中的解决方案
package main
import "fmt"
var formatMap = map[int]string{
0: "",
1: "%v",
}
func Println(v ...interface{}) {
l := len(v)
if s, isOk := formatMap[l]; !isOk {
for i := 0; i < len(v); i++ {
s += "%v"
}
formatMap[l] = s
}
s := formatMap[l] + "\n"
fmt.Printf(s, v...)
}
func main() {
Println()
Println("a", "b")
Println("a", "b")
Println("a", "b", "c", 1)
}