去 - 打印项目之间没有空格

时间:2014-09-19 07:55:24

标签: go

fmt.Println("a","b")

我想在没有空格填充的情况下打印两个字符串,即" ab",但上面会打印" a b"。

Go fmt

我是否只是切换到使用Printf

fmt.Printf("%s%s\n","a","b")

5 个答案:

答案 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)
}