2014-09-19 13 views
5
fmt.Println("a","b") 

Chcę wydrukować dwa ciągi bez wypełnienia przestrzeni, a mianowicie "ab", ale powyższe będzie wydrukować "a b".go - drukuj bez odstępu między pozycjami

Go fmt

Czy ja po prostu przełączyć się na używanie Printf?

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

'' 'fmt.Println ("ab")' '' –

Odpowiedz

10

zwykły stary druk będzie działać, jeśli uczynić ostatni element „\ n”.
Łatwiej będzie również odczytać, jeśli nie jesteś przyzwyczajony do formatowania stylu printf.

Zobacz tutaj on play

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

wypisze:

a b 
ab 
ab 
+3

Nie zapomnij o 'fmt.Println (" a "+" b ")' – AndrewN

1

println polega na doPrint(args, true, true), gdzie pierwszy argument jest addspace a drugi jest addnewline. Więc Prinln z wieloma argumentami zawsze będzie drukować przestrzeń.

Wygląda na to, że nie ma połączenia z numerem doPrint(args, false, true). Printf może być rozwiązaniem, Print również, ale powinieneś dodać znak nowej linii.

2

Jak można znaleźć w doc:

println formatów za pomocą domyślnych formatów dla swoich argumentów i pisze na standardowe wyjście. Spacje są zawsze dodawane między operandami i dołączony jest znak nowej linii. Zwraca liczbę zapisanych bajtów i napotkany błąd zapisu .

Więc albo trzeba robić to, co już zostało powiedziane czy można łączyć ciągi przed drukowaniem:

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

zależności od usecase można użyć strings.Join(myStrings, "") do tego celu.

+0

Zastanawiam się, co było uzasadnienie dla podejmowania 'Print' zachowywać subtelnie inaczej niż "Println" w ten sposób. – Maxpm

0

Trzeba by odniesienia do porównania wydajności, ale wolałbym użyć następujących niż Printf:

fmt.Println(strings.Join([]string{"a", "b"}, "")) 

Pamiętaj import "strings" i zobacz strings.Join dokumentację o wyjaśnienia.

0

rozwiązanie w moim projekcie

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) 
} 
Powiązane problemy