2014-09-19 14 views

risposta

10

Plain vecchia stampa funzionerà se si effettua l'ultimo elemento "\ n".
Sarà anche più facile da leggere se non si è abituati a stampare in stile.

Vedi qui on play

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

stamperà:

a b 
ab 
ab 
+3

Non dimenticare 'fmt.Println (" a "+" b ")' – AndrewN

1

println si basa su doPrint(args, true, true), dove il primo argomento è addspace e la seconda è addnewline. Quindi, con più argomenti stamperai sempre lo spazio.

Sembra non ci sia nessuna chiamata di doPrint(args, false, true) che è quello che vuoi. Printf può essere una soluzione, Print ma è necessario aggiungere una nuova riga.

2

Come si può trovare nella doc:

formati println utilizzando i formati predefiniti per i suoi operandi e scrive sullo standard output. Gli spazi vengono sempre aggiunti tra gli operandi e viene aggiunto un nuovo numero . Restituisce il numero di byte scritti e qualsiasi errore di scrittura riscontrato.

Così si sia bisogno di fare quello che già detto o è possibile concatenare le stringhe prima della stampa:

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

A seconda del caso d'uso è possibile utilizzare strings.Join(myStrings, "") a tale scopo.

+0

Mi chiedo che la logica era per fare 'comportarsi Print' in modo leggermente diverso da 'Println' come questo. – Maxpm

0

dovreste punto di riferimento per confrontare le prestazioni, ma preferisce utilizzare il seguente di un Printf:

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

Ricordarsi di import "strings", e vedere strings.Join documentazione per una spiegazione.

0

la soluzione nel mio progetto

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) 
} 
Problemi correlati