Home >Backend Development >Golang >How can I store both string and integer values in a struct field in Go?

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

DDD
DDDOriginal
2024-11-28 00:14:11883browse

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

Type Conversion and Interfaces in Struct Fields

Question:

In a Go program, a struct is used to define a user-defined data type that bundles together multiple fields of different types. However, what if you want a field within a struct that can store both string and integer values?

Answer:

Go's type system does not support sum types, which allow a single field to store values of multiple types. However, there is a workaround using interfaces. An interface defines a set of methods, and any type that implements those methods can be used as that interface.

To implement this solution, consider the following snippet:

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

type TestCase struct {
  Input    Input
  IsValid  bool
}

In this example, we have defined the Input interface with two methods, ToString() and ToInteger(), which are used to convert the Input value to a string or integer. The TestCase struct now has an Input field that accepts any type that implements the Input interface.

To use this solution, you can define custom types that implement the Input interface:

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 these custom types, you can create a TestCase and assign values to the Input field:

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

While this approach allows you to store both string and integer values in the same field, it requires implementing custom types and conversion methods, which may not be suitable for all cases.

The above is the detailed content of How can I store both string and integer values in a struct field in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn