Ce face fmt.Fprintln
fmt.Fprintln și fmt.Fprint fac exact ce fac Println și Print, dar scriu în destinația primită ca prim argument. Destinația poate fi orice valoare care implementează io.Writer: os.Stdout (ecranul), os.Stderr (ieșirea de erori), un fișier deschis, un strings.Builder, un bytes.Buffer sau http.ResponseWriter într-un server web.
De fapt, fmt.Println(x) este doar fmt.Fprintln(os.Stdout, x). Când scrii o funcție care primește un io.Writer, ea poate scrie oriunde, iar în teste poți verifica ce a scris folosind un buffer.
Parametri
| Parametru | Descriere |
|---|---|
w io.Writer |
Destinația: orice tip cu metoda Write([]byte) (int, error). |
a ...any |
Valorile de scris. |
Ce returnează
Numărul de octeți scriși și eroarea de scriere (de exemplu disc plin). La fișiere merită verificată.
Exemple
Exemplul 1: Aceeași funcție scrie pe ecran sau într-un buffer
Funcția raport nu știe unde scrie. O chemăm o dată cu os.Stdout și o dată cu un strings.Builder.
package main
import (
"fmt"
"io"
"os"
"strings"
)
func raport(w io.Writer, elev string, nota int) {
fmt.Fprintln(w, "Elev:", elev)
fmt.Fprint(w, "Nota: ", nota, "\n")
}
func main() {
raport(os.Stdout, "Ana", 10)
var sb strings.Builder
raport(&sb, "Ion", 8)
fmt.Printf("În buffer: %q\n", sb.String())
}
Rezultat
Elev: Ana
Nota: 10
În buffer: "Elev: Ion\nNota: 8\n"
Exemplul 2: Scriere într-un fișier, cu verificarea erorii
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Create("orase.txt")
if err != nil {
fmt.Println("nu pot crea fișierul:", err)
return
}
for _, oras := range []string{"Iași", "Cluj", "Timișoara"} {
if _, err := fmt.Fprintln(f, oras); err != nil {
fmt.Println("eroare la scriere:", err)
}
}
f.Close()
date, _ := os.ReadFile("orase.txt")
fmt.Print(string(date))
}
Rezultat
Iași
Cluj
Timișoara
Greșeli frecvente
- Dai un
strings.Buildersaubytes.Bufferprin valoare:fmt.Fprintln(sb, ...). MetodaWriteare receptor pointer, deci trebuie&sb; altfel programul nu compilează. - Uiți să închizi fișierul (
f.Close()). Datele pot rămâne nescrise, iar fișierul rămâne deschis până la ieșirea programului.
Comenzi înrudite
fmt.Println: Afișează valorile pe ecran: Println pune spații între ele și trece la rând nou, Print nu.fmt.Printf: Afișează text formatat cu %d, %s, %.2f etc.; Sprintf returnează textul, Fprintf îl scrie într-un fișier sau alt Writer.strings.Builder: Construiește eficient un text din multe bucăți: adaugi cu WriteString, WriteByte, WriteRune sau Write și obții rezultatul cu String().bytes.Buffer: Un buffer de octeți care crește singur: scrii în el cu Write/WriteString/WriteByte/WriteRune și citești cu String() sau Bytes().