bytes.Contains în Go

Variantele pentru []byte ale funcțiilor strings.Contains, strings.TrimSpace și strings.ToUpper.

Sintaxă
func Contains(b, subslice []byte) bool
func TrimSpace(s []byte) []byte
func ToUpper(s []byte) []byte

Ce face bytes.Contains

bytes.Contains(b, subslice) spune dacă secvența subslice apare în b. bytes.TrimSpace(s) scoate spațiile albe de la capete. bytes.ToUpper(s) returnează o copie cu literele mari, corect și pentru diacritice (octeții sunt interpretați ca UTF-8).

Funcționează exact ca perechile lor din strings (Contains, TrimSpace, ToUpper), dar primesc și returnează []byte. Există și bytes.Index, bytes.HasPrefix, bytes.ReplaceAll, bytes.Fields, bytes.ToLower și celelalte.

Atenție: TrimSpace returnează o bucată din același slice (fără copiere), deci modificarea rezultatului modifică și originalul. ToUpper returnează întotdeauna o copie nouă.

Parametri

Parametru Descriere
b / s Slice-ul de octeți.
subslice La Contains: secvența căutată.

Ce returnează

Contains: bool. TrimSpace și ToUpper: un []byte.

Exemple

Exemplul 1: Prelucrarea unui rând citit ca octeți

package main

import (
	"bytes"
	"fmt"
)

func main() {
	rand := []byte("  eroare: disc plin în /home/ana  \r\n")
	curat := bytes.TrimSpace(rand)
	fmt.Printf("%q\n", curat)
	fmt.Println("e eroare?", bytes.Contains(curat, []byte("eroare")))
	fmt.Println(string(bytes.ToUpper(curat)))
}

Rezultat

"eroare: disc plin în /home/ana"
e eroare? true
EROARE: DISC PLIN ÎN /HOME/ANA

Exemplul 2: TrimSpace împarte memoria, ToUpper nu

package main

import (
	"bytes"
	"fmt"
)

func main() {
	original := []byte("  ana  ")
	t := bytes.TrimSpace(original)
	t[0] = 'A'
	fmt.Printf("%q\n", original)

	u := bytes.ToUpper(original)
	u[2] = 'x'
	fmt.Printf("%q %q\n", original, u)
}

Rezultat

"  Ana  "
"  Ana  " "  xNA  "

Greșeli frecvente

  • Transformi datele în string doar ca să folosești strings.Contains și apoi înapoi în []byte. Fiecare conversie copiază datele; folosește direct funcțiile din bytes.
  • Modifici rezultatul lui TrimSpace crezând că este o copie: schimbi și slice-ul inițial.

Comenzi înrudite

  • bytes.Equal: Equal verifică dacă două slice-uri de octeți au același conținut; Compare le ordonează și dă -1, 0 sau 1.
  • bytes.Split: Split împarte un []byte după un separator în mai multe slice-uri; Join le lipește la loc cu un separator.
  • strings.Contains: Verifică dacă un text conține un alt text, unul dintre niște caractere, un caracter anume sau un caracter care respectă o condiție.
  • strings.TrimSpace: Scoate spațiile albe (spații, tab, rânduri noi) de la începutul și sfârșitul textului.
  • strings.ToUpper: Returnează textul scris cu litere mari (ToUpper) sau mici (ToLower), inclusiv diacriticele.