strings.CutPrefix în Go

Scoate un prefix (CutPrefix) sau un sufix (CutSuffix) din text și spune dacă exista.

Sintaxă
func CutPrefix(s, prefix string) (after string, found bool)
func CutSuffix(s, suffix string) (before string, found bool)

Ce face strings.CutPrefix

strings.CutPrefix(s, prefix) verifică dacă s începe cu prefix și, dacă da, returnează restul textului și true. Altfel returnează textul neschimbat și false. CutSuffix face la fel cu sfârșitul.

Înlocuiește combinația if strings.HasPrefix(s, p) { s = strings.TrimPrefix(s, p) } cu un singur apel. Este potrivită pentru comenzi (/start), antete (Bearer …) sau extensii.

Parametri

Parametru Descriere
s Textul.
prefix / suffix Partea care se scoate de la început / sfârșit.

Ce returnează

Textul rămas și found, care spune dacă prefixul (sufixul) a existat.

Exemple

Exemplul 1: Comenzi de chat

package main

import (
	"fmt"
	"strings"
)

func main() {
	for _, mesaj := range []string{"/vreme Iași", "/ajutor", "bună ziua"} {
		if oras, ok := strings.CutPrefix(mesaj, "/vreme "); ok {
			fmt.Println("caut vremea pentru", oras)
		} else if strings.HasPrefix(mesaj, "/") {
			fmt.Println("comandă:", mesaj[1:])
		} else {
			fmt.Println("mesaj obișnuit:", mesaj)
		}
	}
}

Rezultat

caut vremea pentru Iași
comandă: ajutor
mesaj obișnuit: bună ziua

Exemplul 2: Extensia unui fișier

package main

import (
	"fmt"
	"strings"
)

func main() {
	for _, f := range []string{"raport.pdf", "poza.png"} {
		nume, ePDF := strings.CutSuffix(f, ".pdf")
		fmt.Printf("%-11s PDF: %-5t nume: %s\n", f, ePDF, nume)
	}
}

Rezultat

raport.pdf  PDF: true  nume: raport
poza.png    PDF: false nume: poza.png

Greșeli frecvente

  • Te aștepți ca un prefix gol să returneze false. Un prefix gol există în orice text, deci found este true.

Comenzi înrudite

  • strings.HasPrefix: Verifică dacă un text începe (HasPrefix) sau se termină (HasSuffix) cu un anumit text.
  • strings.TrimPrefix: Scoate o singură dată un prefix (TrimPrefix) sau un sufix (TrimSuffix) exact, dacă textul îl are.
  • strings.Cut: Taie textul în două la prima (Cut) sau ultima (CutLast) apariție a separatorului și spune dacă l-a găsit.