strings.Cut în Go

Căutare și comparare în texte (strings) Go 1.18 (CutLast din Go 1.27)

Taie textul în două la prima (Cut) sau ultima (CutLast) apariție a separatorului și spune dacă l-a găsit.

Sintaxă
func Cut(s, sep string) (before, after string, found bool)
func CutLast(s, sep string) (before, after string, found bool)

Ce face strings.Cut

strings.Cut(s, sep) caută prima apariție a lui sep și returnează trei valori: textul dinainte, textul de după și found, care spune dacă separatorul a fost găsit. Dacă nu a fost găsit, primești s, "", false.

Este cea mai simplă metodă de a despărți perechi de tipul cheie=valoare, nume:parolă sau utilizator@domeniu, fără să lucrezi cu poziții sau cu slice-uri ca la Split.

strings.CutLast, nou în Go 1.27, face același lucru la ultima apariție: util pentru extensia unui fișier (arhiva.tar.gz) sau ultimul segment dintr-o cale.

Parametri

Parametru Descriere
s Textul de tăiat.
sep Separatorul; nu apare în rezultat.

Ce returnează

before (înainte de separator), after (după separator) și found (bool).

Exemple

Exemplul 1: Perechi cheie=valoare

package main

import (
	"fmt"
	"strings"
)

func main() {
	setari := []string{"oras=Iași", "limba=ro", "tema"}
	for _, s := range setari {
		cheie, valoare, ok := strings.Cut(s, "=")
		if !ok {
			fmt.Printf("%q: lipsește '='\n", s)
			continue
		}
		fmt.Printf("%s -> %s\n", cheie, valoare)
	}
	user, domeniu, _ := strings.Cut("ana.pop@exemplu.ro", "@")
	fmt.Println(user, "|", domeniu)
}

Rezultat

oras -> Iași
limba -> ro
"tema": lipsește '='
ana.pop | exemplu.ro

Exemplul 2: Cut față de CutLast

Pe un nume cu două puncte, Cut taie la primul punct, iar CutLast la ultimul.

package main

import (
	"fmt"
	"strings"
)

func main() {
	f := "backup.2026.tar.gz"
	a, b, _ := strings.Cut(f, ".")
	fmt.Printf("Cut:     %q %q\n", a, b)
	a, b, _ = strings.CutLast(f, ".")
	fmt.Printf("CutLast: %q %q\n", a, b)
	a, b, ok := strings.CutLast("fara-punct", ".")
	fmt.Printf("negăsit: %q %q %t\n", a, b, ok)
}

Rezultat

Cut:     "backup" "2026.tar.gz"
CutLast: "backup.2026.tar" "gz"
negăsit: "fara-punct" "" false

Greșeli frecvente

  • Ignori found. Când separatorul lipsește, after este gol și programul tratează greșit datele; verifică al treilea rezultat.
  • Folosești CutLast cu o versiune de Go mai veche de 1.27: funcția nu există. Acolo folosește strings.LastIndex și tăiere manuală.

Comenzi înrudite

  • strings.CutPrefix: Scoate un prefix (CutPrefix) sau un sufix (CutSuffix) din text și spune dacă exista.
  • strings.Split: Împarte textul în bucăți după un separator exact; SplitN limitează numărul de bucăți, SplitAfter păstrează separatorul.
  • strings.Index: Returnează poziția (în octeți) a primei sau ultimei apariții a unui text, octet sau caracter; -1 dacă nu există.