stdout
è un flusso (io.Writer
). Non è possibile modificare ciò che è stato già scritto su di esso. Ciò che può modificare è come viene rappresentato il flusso nel caso in cui venga stampato su un terminale. Nota che non ci sono buone ragioni per assumere questo scenario. Ad esempio, un utente può reindirizzare lo stdout su una pipe o su un file a piacimento.
Quindi l'approccio corretto è quello di primo controllo:
- se lo stdout sta andando a un terminale
- cosa è procedura che del terminale di sovrascrivere una linea/schermo
Sia della sopra sono fuori dallo scopo di questa domanda, ma supponiamo che un terminale sia il nostro dispositivo. Quindi, di solito, stampa:
fmt.Printf("\rOn %d/10", i)
sovrascriverà la riga precedente nel terminale. \r
corrisponde a carriage return
, implementato da molti terminali come spostamento del cursore all'inizio della riga corrente, fornendo quindi la funzione di "sovrascrittura".
Come esempio di terminale "altro" con "sovrascrittura" supportata in modo diverso, ecco un esempio su playground.
Come cancellare la coda della riga precedente? se 'i' inizia da 10, allora la soluzione stamperà' Su 90', 'Su 80', ... – coanor
@coanor: O cancella la linea stampando gli spazi, o tampona ogni valore con spazi. –
@zzzz qualsiasi soluzione che usi con il pacchetto 'log'? perché 'fmt' non è thread-safe –