io.WriteString în Go

Scrie un text în orice io.Writer, folosind metoda WriteString a acestuia dacă există.

Sintaxă
func WriteString(w Writer, s string) (n int, err error)

Ce face io.WriteString

io.WriteString scrie s în w. Dacă w are o metodă WriteString (cum au *os.File, *bytes.Buffer, *strings.Builder, *bufio.Writer), o folosește direct, fără să copieze textul într-un []byte. Altfel apelează w.Write([]byte(s)).

Este modul simplu de a scrie text într-un Writer oarecare, când nu ai nevoie de formatare. Cu formatare, folosește fmt.Fprintf.

Parametri

Parametru Descriere
w Destinația.
s Textul de scris.

Ce returnează

Numărul de octeți scriși și eroarea, ca la Write.

Exemple

Exemplul 1: Scriere în destinații diferite

package main

import (
    "fmt"
    "io"
    "os"
    "strings"
)

func main() {
    io.WriteString(os.Stdout, "pe ecran\n")

    var sb strings.Builder
    io.WriteString(&sb, "în memorie")
    fmt.Println(sb.String())

    f, _ := os.Create("nota.txt")
    n, err := io.WriteString(f, "în fișier\n")
    f.Close()
    fmt.Println("octeți:", n, "eroare:", err)
}

Rezultat

pe ecran
în memorie
octeți: 12 eroare: <nil>

Exemplul 2: Într-o funcție generică

package main

import (
    "io"
    "os"
)

func scrieTabel(w io.Writer, randuri [][2]string) error {
    for _, r := range randuri {
        if _, err := io.WriteString(w, r[0]+"\t"+r[1]+"\n"); err != nil {
            return err
        }
    }
    return nil
}

func main() {
    scrieTabel(os.Stdout, [][2]string{{"Ana", "Iași"}, {"Mihai", "Cluj"}, {"Ioana", "Brașov"}})
}

Rezultat

Ana	Iași
Mihai	Cluj
Ioana	Brașov

Greșeli frecvente

  • Scrii w.Write([]byte(s)) peste tot. Funcționează, dar io.WriteString poate evita copierea textului.

Comenzi înrudite

  • io.Writer: Interfața pentru orice destinație în care se pot scrie octeți: fișiere, ecran, buffer-e, răspunsuri HTTP.
  • os.File.Write: Scrie octeți (Write) sau text (WriteString) în fișier, la poziția curentă.
  • bufio.Writer.WriteString: WriteString adaugă un text în buffer; WriteRune adaugă un singur caracter Unicode, codat UTF-8.