fmt.Println în Go

Afișează valorile pe ecran: Println pune spații între ele și trece la rând nou, Print nu.

Sintaxă
func Println(a ...any) (n int, err error)
func Print(a ...any) (n int, err error)

Ce face fmt.Println

fmt.Println este prima funcție pe care o folosești în Go. Primește oricâte valori, de orice tip, le transformă în text cu formatul implicit, pune un spațiu între ele și adaugă la final un rând nou (\n).

fmt.Print face același lucru, dar nu adaugă rândul nou la final și pune spațiu între două valori doar dacă niciuna nu este text (string). De aceea fmt.Print("a", "b") afișează ab, iar fmt.Print(1, 2) afișează 1 2.

Ambele afișează tablourile, slice-urile, map-urile și structurile direct: [1 2 3], map[Cluj:2 Iași:5] (cheile unui map apar sortate), {Ana 21}. Dacă un tip are metoda String() string (interfața fmt.Stringer), se afișează rezultatul ei.

Parametri

Parametru Descriere
a ...any Oricâte valori, de orice tip. Pot lipsi: fmt.Println() afișează doar un rând gol.

Ce returnează

Numărul de octeți scriși și o eroare de scriere. Aproape nimeni nu le verifică la afișarea pe ecran.

Exemple

Exemplul 1: Println cu valori de tipuri diferite

Println pune un spațiu între fiecare două valori și trece singur la rând nou după fiecare apel.

package main

import "fmt"

func main() {
	nume := "Ana"
	varsta := 21
	media := 9.45
	fmt.Println("Salut,", nume)
	fmt.Println(nume, "are", varsta, "de ani și media", media)
	fmt.Println()
	fmt.Println(true, 'A', nil)
}

Rezultat

Salut, Ana
Ana are 21 de ani și media 9.45

true 65 <nil>

Exemplul 2: Print fără rând nou și fără spații între texte

Între două texte Print nu pune spațiu; între două numere pune. Rândul nou trebuie scris explicit cu \n.

package main

import "fmt"

func main() {
	fmt.Print("Iași", "Cluj", "\n")
	fmt.Print(1, 2, 3, "\n")
	fmt.Print("Nota: ", 10, "\n")
	for i := 1; i <= 3; i++ {
		fmt.Print(i, " ")
	}
	fmt.Print("\n")
}

Rezultat

IașiCluj
1 2 3
Nota: 10
1 2 3

Exemplul 3: Afișarea colecțiilor și a structurilor

Map-urile sunt afișate cu cheile sortate, așa că rezultatul este mereu același.

package main

import "fmt"

type Student struct {
	Nume  string
	Varsta int
}

func main() {
	note := []int{9, 7, 10}
	orase := map[string]int{"Iași": 5, "Cluj": 2, "Brașov": 3}
	s := Student{"Ana", 21}
	fmt.Println(note)
	fmt.Println(orase)
	fmt.Println(s)
	fmt.Println(len(note), "note")
}

Rezultat

[9 7 10]
map[Brașov:3 Cluj:2 Iași:5]
{Ana 21}
3 note

Greșeli frecvente

  • Scrii fmt.Println("Total: %d", total). Println nu înțelege %d: afișează textul exact, urmat de valoare. Pentru formatare folosește fmt.Printf (go vet te avertizează).
  • Te aștepți ca fmt.Print("Ana", "Ion") să pună spațiu între nume. Nu pune, pentru că ambele sunt texte. Folosește Println sau scrie spațiul tu.
  • Uiți să imporți pachetul: fără import "fmt" programul nu compilează. Invers, un import nefolosit este tot eroare de compilare.

Comenzi înrudite

  • fmt.Printf: Afișează text formatat cu %d, %s, %.2f etc.; Sprintf returnează textul, Fprintf îl scrie într-un fișier sau alt Writer.
  • fmt.Sprint: Transformă valorile în text și îl returnează, fără să afișeze nimic; Sprintln adaugă spații și rând nou.
  • fmt.Fprintln: Scrie valorile într-un io.Writer (fișier, buffer, răspuns HTTP) cu regulile lui Println, respectiv Print.
  • fmt.Stringer: Interfața tipurilor care știu să se descrie ca text: fmt folosește metoda String() la afișare.