Ce face os.File.Write
Write scrie tot slice-ul b și returnează câți octeți a scris. Dacă n < len(b), sigur a apărut și o eroare. WriteString face același lucru pentru un string, fără să-l transformi tu în []byte.
Scrierea începe la poziția curentă (la început pentru os.Create, la final pentru O_APPEND) și o mută mai departe. Fiecare apel ajunge direct la sistemul de operare; pentru multe scrieri mici, bufio.Writer este mult mai rapid. Pentru text formatat folosește fmt.Fprintf(f, ...).
Parametri
| Parametru | Descriere |
|---|---|
b |
Octeții de scris (la Write). |
s |
Textul de scris (la WriteString). |
Ce returnează
Numărul de octeți scriși și nil, sau o eroare. Atenție: n numără octeți, nu litere (ș, ă au câte 2 octeți).
Exemple
Exemplul 1: Write și WriteString
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Create("bon.txt")
if err != nil {
fmt.Println("eroare:", err)
return
}
defer f.Close()
n1, _ := f.Write([]byte("Pâine 4,50 lei\n"))
n2, _ := f.WriteString("Lapte 7,20 lei\n")
n3, _ := fmt.Fprintf(f, "Total %.2f lei\n", 11.70)
fmt.Println("octeți scriși:", n1, n2, n3)
date, _ := os.ReadFile("bon.txt")
fmt.Print(string(date))
}
Rezultat
octeți scriși: 16 15 16
Pâine 4,50 lei
Lapte 7,20 lei
Total 11.70 lei
Exemplul 2: Octeți, nu litere
package main
import (
"fmt"
"os"
"unicode/utf8"
)
func main() {
f, _ := os.Create("oras.txt")
defer f.Close()
text := "Timișoara"
n, _ := f.WriteString(text)
fmt.Println("octeți:", n, "| litere:", utf8.RuneCountInString(text))
}
Rezultat
octeți: 10 | litere: 9
Exemplul 3: Scriere cu verificarea erorii
package main
import (
"fmt"
"os"
)
func main() {
f, _ := os.Create("clienti.csv")
defer f.Close()
clienti := []string{"Ana,Iași", "Mihai,Cluj", "Ioana,Brașov"}
for _, c := range clienti {
if _, err := f.WriteString(c + "\n"); err != nil {
fmt.Println("eroare la scriere:", err)
return
}
}
info, _ := f.Stat()
fmt.Println("dimensiune:", info.Size(), "octeți")
}
Rezultat
dimensiune: 35 octeți
Greșeli frecvente
- Faci mii de
WriteStringmici direct pe fișier. Fiecare e un apel de sistem; învelește fișierul într-unbufio.Writer. - Ignori eroarea de scriere. Discul plin sau un fișier deschis doar pentru citire trec neobservate.
Comenzi înrudite
os.File: Tipul care reprezintă un fișier deschis; îl obții cu os.Open, os.Create sau os.OpenFile.io.Writer: Interfața pentru orice destinație în care se pot scrie octeți: fișiere, ecran, buffer-e, răspunsuri HTTP.io.WriteString: Scrie un text în orice io.Writer, folosind metoda WriteString a acestuia dacă există.bufio.NewWriter: Învelește un io.Writer într-un bufio.Writer, care strânge scrierile mici într-un buffer și le trimite în blocuri.os.WriteFile: Scrie octeții dați într-un fișier: îl creează dacă lipsește și îi înlocuiește conținutul dacă există.