ホームページ > バックエンド開発 > Golang > Go の構造体フィールドに文字列と整数値の両方を保存するにはどうすればよいですか?

Go の構造体フィールドに文字列と整数値の両方を保存するにはどうすればよいですか?

DDD
リリース: 2024-11-28 00:14:11
オリジナル
938 人が閲覧しました

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

構造体フィールドの型変換とインターフェイス

質問:

Go プログラムでは、構造体は、異なる型の複数のフィールドを束ねるユーザー定義のデータ型を定義するために使用されます。しかし、文字列と整数値の両方を格納できる構造体内のフィールドが必要な場合はどうすればよいでしょうか?

答え:

Go の型システムは sum 型をサポートしていません。単一のフィールドに複数の型の値を格納できるようにします。ただし、インターフェイスを使用する回避策があります。インターフェイスはメソッドのセットを定義し、それらのメソッドを実装する任意の型をそのインターフェイスとして使用できます。

このソリューションを実装するには、次のスニペットを検討してください。

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

type TestCase struct {
  Input    Input
  IsValid  bool
}
ログイン後にコピー

この例ではでは、ToString() と ToInteger() という 2 つのメソッドを使用して入力インターフェイスを定義しました。これらのメソッドは、入力値を文字列または整数に変換するために使用されます。 TestCase 構造体には、Input インターフェイスを実装する任意の型を受け入れる入力フィールドが追加されました。

このソリューションを使用するには、Input インターフェイスを実装するカスタム型を定義できます。

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)
}
ログイン後にコピー

Withこれらのカスタム タイプを使用して、テストケースを作成し、入力フィールドに値を割り当てることができます。

var testCase = TestCase{Input: StringInput("Hello"), IsValid: true}
fmt.Println(testCase.Input.ToString()) // Prints "Hello"
fmt.Println(testCase.Input.ToInteger()) // Throws error
ログイン後にコピー

このアプローチでは、文字列と文字列の両方を保存できます。同じフィールドに整数値を含めるには、カスタム型と変換メソッドを実装する必要がありますが、すべてのケースに適しているわけではありません。

以上がGo の構造体フィールドに文字列と整数値の両方を保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート