strconv.AppendInt în Go

Adaugă un număr sau un bool, scris ca text, la sfârșitul unui []byte, fără să creeze un text intermediar.

Sintaxă
func AppendInt(dst []byte, i int64, base int) []byte
func AppendUint(dst []byte, i uint64, base int) []byte
func AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte
func AppendBool(dst []byte, b bool) []byte

Ce face strconv.AppendInt

Funcțiile Append* fac același lucru ca FormatInt, FormatUint, FormatFloat și FormatBool, dar în loc să returneze un string nou, adaugă caracterele la un slice []byte existent și returnează slice-ul mărit (ca append).

Sunt folosite în cod care trebuie să fie rapid (scrierea de jurnale, protocoale, fișiere mari): poți refolosi același buffer la nesfârșit, fără alocări. Pentru programe obișnuite, strconv.Itoa sau fmt.Sprintf sunt suficiente.

Parametri

Parametru Descriere
dst Slice-ul la care se adaugă (poate fi nil).
i / f / b Valoarea de scris.
base, fmt, prec, bitSize Aceleași ca la FormatInt și FormatFloat.

Ce returnează

Slice-ul cu caracterele adăugate. Folosește valoarea returnată: buf = strconv.AppendInt(buf, …).

Exemple

Exemplul 1: Un rând de jurnal construit din bucăți

package main

import (
	"fmt"
	"strconv"
)

func main() {
	buf := []byte("comanda=")
	buf = strconv.AppendInt(buf, 1042, 10)
	buf = append(buf, " total="...)
	buf = strconv.AppendFloat(buf, 149.9, 'f', 2, 64)
	buf = append(buf, " platita="...)
	buf = strconv.AppendBool(buf, true)
	buf = append(buf, " cod="...)
	buf = strconv.AppendUint(buf, 255, 16)
	fmt.Println(string(buf))
}

Rezultat

comanda=1042 total=149.90 platita=true cod=ff

Exemplul 2: Refolosirea bufferului în buclă

package main

import (
	"fmt"
	"strconv"
)

func main() {
	buf := make([]byte, 0, 32)
	for _, nota := range []int64{7, 9, 10} {
		buf = buf[:0]
		buf = append(buf, "nota: "...)
		buf = strconv.AppendInt(buf, nota, 10)
		fmt.Println(string(buf))
	}
}

Rezultat

nota: 7
nota: 9
nota: 10

Greșeli frecvente

  • Nu salvezi rezultatul: strconv.AppendInt(buf, 5, 10) singur nu modifică buf în exterior.

Comenzi înrudite

  • strconv.FormatInt: Transformă un întreg în text, în baza dorită (2–36): binar, octal, zecimal, hexazecimal.
  • strconv.FormatFloat: Transformă un număr cu zecimale în text, cu formatul (‘f’, ‘e’, ‘g’) și numărul de zecimale dorite.
  • strconv.AppendQuote: Variantele Append ale funcțiilor Quote și QuoteRune: adaugă textul sau caracterul între ghilimele la un []byte.
  • fmt.Appendf: Formatează valorile ca Sprint, Sprintf sau Sprintln, dar adaugă rezultatul la un []byte existent.
  • bytes.Buffer.Len: Len dă octeții necitiți, Cap capacitatea, Grow rezervă loc, Available spațiul liber, iar AvailableBuffer un slice pentru scriere directă.