Sobes.tech
Junior — Middle

Jak je organizována vnitřní struktura řetězového typu v jazyce Go?

sobes.tech AI

Odpověď od AI

V jazyce Go je řetězec (string) nemměnitelný datový typ, který představuje posloupnost bajtů v kódování UTF-8. Interně je řetězec implementován jako struktura se dvěma poli:

  • ukazatel na pole bajtů (slice bajtů), kde je uložen obsah řetězce;
  • délka řetězce (počet bajtů).

To lze přibližně představit takto:

// zjednodušené zobrazení vnitřní struktury řetězce
type stringStruct struct {
    ptr *byte  // ukazatel na data
    len int    // délka v bajtech
}

Kvůli neměnitelnosti řetězce při změnách je vytvářena nová kopie dat. To zajišťuje bezpečnost a jednoduchost práce s řetězci, ale vyžaduje pozornost při častých spojování (je lepší používat strings.Builder).

Také je důležité, že délka je uložena v bajtech, nikoliv v Unicode znacích, proto je při práci se znaky nutné používat balíček unicode/utf8.