Home >Backend Development >Golang >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!