bytes.Split în Go

Split împarte un []byte după un separator în mai multe slice-uri; Join le lipește la loc cu un separator.

Sintaxă
func Split(s, sep []byte) [][]byte
func Join(s [][]byte, sep []byte) []byte

Ce face bytes.Split

bytes.Split(s, sep) funcționează ca strings.Split: taie la fiecare apariție a lui sep și returnează bucățile ca [][]byte. Bucățile nu sunt copii: arată spre aceeași memorie ca s.

bytes.Join(s, sep) face invers, ca strings.Join: creează un slice nou cu toate bucățile și separatorul între ele.

Parametri

Parametru Descriere
s Datele (la Split) sau lista de bucăți (la Join).
sep Separatorul.

Ce returnează

Split: [][]byte. Join: un []byte nou.

Exemple

Exemplul 1: Rânduri și câmpuri dintr-un fișier citit ca octeți

package main

import (
	"bytes"
	"fmt"
)

func main() {
	continut := []byte("Ana;10\nIon;8\nMaria;9")
	for _, rand := range bytes.Split(continut, []byte("\n")) {
		campuri := bytes.Split(rand, []byte(";"))
		fmt.Printf("%s are %s\n", campuri[0], campuri[1])
	}
}

Rezultat

Ana are 10
Ion are 8
Maria are 9

Exemplul 2: Join și memoria comună a bucăților

package main

import (
	"bytes"
	"fmt"
)

func main() {
	date := []byte("iasi,cluj,brasov")
	parti := bytes.Split(date, []byte(","))
	fmt.Println(string(bytes.Join(parti, []byte(" | "))))

	parti[0][0] = 'I' // modifică și „date”
	fmt.Println(string(date))
}

Rezultat

iasi | cluj | brasov
Iasi,cluj,brasov

Greșeli frecvente

  • Păstrezi bucățile lui Split și apoi refolosești bufferul inițial pentru alte date: bucățile se schimbă și ele. Copiază-le cu bytes.Clone dacă trebuie păstrate.

Comenzi înrudite

  • strings.Split: Împarte textul în bucăți după un separator exact; SplitN limitează numărul de bucăți, SplitAfter păstrează separatorul.
  • strings.Join: Lipește textele dintr-un slice într-un singur text, cu un separator între ele.
  • bytes.Contains: Variantele pentru []byte ale funcțiilor strings.Contains, strings.TrimSpace și strings.ToUpper.
  • bytes.Buffer.ReadString: Citește din buffer până la un caracter-delimitator (inclusiv), ca text (ReadString) sau octeți (ReadBytes).