首页 >后端开发 >Golang >如何在 Go 的结构体字段中存储字符串和整数值?

如何在 Go 的结构体字段中存储字符串和整数值?

DDD
DDD原创
2024-11-28 00:14:11885浏览

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
}

在此示例中中,我们定义了Input接口,有两个方法ToString()和ToInteger(),它们用于将Input值转换为字符串或整数。 TestCase 结构现在有一个输入字段,它接受任何实现输入接口的类型。

要使用此解决方案,您可以定义实现输入接口的自定义类型:

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)
}

与这些自定义类型,您可以创建一个测试用例并将值分配给输入字段:

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

虽然这种方法允许您存储字符串和同一字段中的整数值,需要实现自定义类型和转换方法,这可能并不适合所有情况。

以上是如何在 Go 的结构体字段中存储字符串和整数值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn