Maison >développement back-end >Golang >Comment puis-je stocker à la fois des chaînes et des entiers dans une structure Go à l'aide d'une interface ?

Comment puis-je stocker à la fois des chaînes et des entiers dans une structure Go à l'aide d'une interface ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 07:54:03334parcourir

How Can I Store Both Strings and Integers in a Go Struct Using an Interface?

Combinaison de valeurs de chaîne et de valeurs entières dans une structure Go : utilisation d'une interface

Dans Go, vous pouvez rencontrer des scénarios dans lesquels vous avez besoin d'une structure de données pour stocker à la fois des valeurs de chaîne et des valeurs entières. Considérez la définition de structure suivante :

type testCase struct {
   input   string
   isValid bool
}

Cependant, vous trouverez peut-être pratique de gérer les entrées sous forme de chaînes ou d'entiers selon le cas d'utilisation. Pour y parvenir, vous pouvez utiliser une interface, comme indiqué ci-dessous :

type Input interface {
   String() string
}

Implémentation de l'interface pour les types chaîne et entier

Vous pouvez implémenter l'interface d'entrée pour les deux chaînes et entiers :

type StringInput string
func (s StringInput) String() string { return string(s) }

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

Utilisation de l'interface d'entrée dans votre structure

Maintenant, vous pouvez modifier votre structure testCase pour utiliser l'interface d'entrée :

type testCase struct {
   input   Input
   isValid bool
}

Exemple de code

Voici un exemple de la façon dont vous pouvez utiliser cette interface pour stocker et récupérer à la fois des valeurs de chaîne et des valeurs entières :

package main

import (
    "fmt"
    "strconv"
)

type Input interface {
    String() string
}

type StringInput string
func (s StringInput) String() string { return string(s) }

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

type testCase struct {
    input   Input
    isValid bool
}

func main() {
    // Create a test case with a string input
    testString := testCase{
        input:   StringInput("Hello, world!"),
        isValid: true,
    }

    // Print the input as a string
    fmt.Println(testString.input.String()) // Output: Hello, world!

    // Create a test case with an integer input
    testInt := testCase{
        input:   IntegerInput(123),
        isValid: true,
    }

    // Print the input as a string
    fmt.Println(testInt.input.String()) // Output: 123
}

En tirant parti l'interface d'entrée, vous pouvez gérer de manière transparente les valeurs de chaîne et les valeurs entières dans votre structure Go, offrant ainsi une plus grande flexibilité et une plus grande réutilisabilité du code.

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