Maison > développement back-end > Golang > le corps du texte

Comment puis-je stocker à la fois des valeurs de chaîne et des valeurs entières dans un champ de structure dans Go ?

DDD
Libérer: 2024-11-28 00:14:11
original
852 Les gens l'ont consulté

How can I store both string and integer values in a struct field in Go?

Conversion de type et interfaces dans les champs Struct

Question :

Dans un programme Go, une structure est utilisée pour définir un type de données défini par l'utilisateur qui regroupe plusieurs champs de types différents. Cependant, que se passe-t-il si vous souhaitez un champ dans une structure pouvant stocker à la fois des valeurs de chaîne et des valeurs entières ?

Réponse :

Le système de types de Go ne prend pas en charge les types de somme, ce qui permettre à un seul champ de stocker des valeurs de plusieurs types. Il existe cependant une solution de contournement utilisant les interfaces. Une interface définit un ensemble de méthodes, et tout type qui implémente ces méthodes peut être utilisé comme interface.

Pour implémenter cette solution, considérez l'extrait suivant :

type Input interface {
  ToString() string
  ToInteger() int
}

type TestCase struct {
  Input    Input
  IsValid  bool
}
Copier après la connexion

Dans cet exemple , nous avons défini l'interface d'entrée avec deux méthodes, ToString() et ToInteger(), qui sont utilisées pour convertir la valeur d'entrée en chaîne ou en entier. La structure TestCase dispose désormais d'un champ de saisie qui accepte tout type implémentant l'interface de saisie.

Pour utiliser cette solution, vous pouvez définir des types personnalisés qui implémentent l'interface de saisie :

type StringInput string

func (s StringInput) ToString() string {
  return string(s)
}

func (s StringInput) ToInteger() int {
  return 0 // Error handling omitted for brevity
}

type IntegerInput int

func (i IntegerInput) ToString() string {
  return strconv.Itoa(int(i))
}

func (i IntegerInput) ToInteger() int {
  return int(i)
}
Copier après la connexion

Avec ces types personnalisés, vous pouvez créer un TestCase et attribuer des valeurs au champ de saisie :

var testCase = TestCase{Input: StringInput("Hello"), IsValid: true}
fmt.Println(testCase.Input.ToString()) // Prints "Hello"
fmt.Println(testCase.Input.ToInteger()) // Throws error
Copier après la connexion

Bien que cette approche vous permette de stocker à la fois une chaîne et un entier valeurs dans le même champ, cela nécessite la mise en œuvre de types personnalisés et de méthodes de conversion, qui peuvent ne pas convenir à tous les cas.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal