Maison >développement back-end >Golang >Comment puis-je représenter au mieux les chaînes facultatives dans Go ?

Comment puis-je représenter au mieux les chaînes facultatives dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-20 06:01:09313parcourir

How Can I Best Represent Optional Strings in Go?

Go idiomatique : représentation de chaînes facultatives

L'absence de types de variantes dans Go pose un défi pour la modélisation de valeurs qui peuvent exister dans un absent ou forme actuelle. Ceci est particulièrement pertinent pour les chaînes, qui ne peuvent pas accepter nil en tant que membre.

Options de modélisation de chaînes facultatives

  1. string : Bien que l'utilisation d'un pointeur vers une chaîne (string) puisse fonctionner, cela introduit une gêne dans les opérations telles que le référencement d'une chaîne littéraux.
  2. Wrapper : Encapsuler la chaîne et son statut de présence dans un wrapper est une solution viable, mais elle s'écarte de l'objectif d'utiliser simplement une chaîne.
  3. chaîne avec une valeur nulle spécifique :

    a. Chaîne vide ("") : désigner la chaîne vide comme élément nul facilite l'initialisation et la gestion des valeurs absentes des cartes.

    b. Séquence d'octets UTF-8 invalide : pour les cas où les chaînes vides sont valides, une courte séquence d'octets UTF-8 invalide (par exemple, "xff") peut être utilisée pour représenter la valeur nulle tout en autorisant les chaînes de texte valides.

Utilisation d'un octet UTF-8 non valide Séquence

  1. Définissez une constante, telle que const Null = "xff", pour représenter la valeur nulle.
  2. Cette approche autorise à la fois les chaînes vides et les textes valides comme valeurs facultatives .
  3. La fonction utf8.ValidString() peut être utilisée pour vérifier si une chaîne est valide texte.

Exemple :

const Null = "\xff"

func main() {
    fmt.Println(utf8.ValidString(Null)) // false

    s := Null
    fmt.Println([]byte(s)) // [255]
    fmt.Println(s == Null) // true
    s = "notnull"
    fmt.Println(s == Null) // false
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn