Ce face os.Create
os.Create creează fișierul dacă nu există, cu drepturile 0o666 (din care sistemul scade masca umask, de obicei rezultă 0o644). Dacă fișierul există deja, îl golește (îl trunchiază la 0 octeți). Este echivalent cu os.OpenFile(nume, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o666).
Îl folosești când scrii un fișier bucată cu bucată: rânduri de CSV, un raport, rezultatul lui io.Copy. Directorul părinte trebuie să existe. Pentru a adăuga la un fișier existent, folosește os.OpenFile cu os.O_APPEND.
Parametri
| Parametru | Descriere |
|---|---|
name |
Calea fișierului de creat. |
Ce returnează
Fișierul deschis și nil, sau nil și o eroare.
Exemple
Exemplul 1: Scrierea unui raport
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Create("raport.csv")
if err != nil {
fmt.Println("eroare:", err)
return
}
defer f.Close()
fmt.Fprintln(f, "produs,cantitate,pret")
vanzari := []struct {
produs string
cantitate int
pret float64
}{{"cafea", 3, 32.5}, {"ceai", 10, 12}}
for _, v := range vanzari {
fmt.Fprintf(f, "%s,%d,%.2f\n", v.produs, v.cantitate, v.pret)
}
date, _ := os.ReadFile("raport.csv")
fmt.Print(string(date))
}
Rezultat
produs,cantitate,pret
cafea,3,32.50
ceai,10,12.00
Exemplul 2: Create golește fișierul existent
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("lista.txt", []byte("pâine\nlapte\nouă\n"), 0o644)
f, _ := os.Create("lista.txt")
f.WriteString("doar cafea\n")
f.Close()
date, _ := os.ReadFile("lista.txt")
fmt.Printf("%q\n", date)
}
Rezultat
"doar cafea\n"
Exemplul 3: Directorul trebuie să existe
package main
import (
"fmt"
"os"
"path/filepath"
)
func creeaza(cale string) (*os.File, error) {
if err := os.MkdirAll(filepath.Dir(cale), 0o755); err != nil {
return nil, err
}
return os.Create(cale)
}
func main() {
_, err := os.Create("export/2025/clienti.csv")
fmt.Println("direct:", err)
f, err := creeaza("export/2025/clienti.csv")
fmt.Println("cu MkdirAll:", err)
if err == nil {
fmt.Println("creat:", f.Name())
f.Close()
}
}
Rezultat
direct: open export/2025/clienti.csv: no such file or directory
cu MkdirAll: <nil>
creat: export/2025/clienti.csv
Greșeli frecvente
- Folosești
os.Createpe un fișier pe care voiai doar să-l completezi. Conținutul vechi se pierde fără avertisment. - Ignori eroarea lui
Closedupă scriere. Pe unele sisteme, problemele de scriere apar abia la închidere. - Scrii mii de rânduri mici direct în fișier. Învelește-l în
bufio.NewWriterși apeleazăFlushla final.
Comenzi înrudite
os.Open: Deschide un fișier existent doar pentru citire și returnează un *os.File.os.OpenFile: Deschide un fișier cu opțiuni alese de tine: citire, scriere, adăugare la final, creare, golire, creare exclusivă.os.WriteFile: Scrie octeții dați într-un fișier: îl creează dacă lipsește și îi înlocuiește conținutul dacă există.os.CreateTemp: Creează și deschide un fișier temporar nou, cu nume unic, și îl returnează ca *os.File.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.File.Write: Scrie octeți (Write) sau text (WriteString) în fișier, la poziția curentă.