如何修复Go语言实现String Enum时的数组转字符串类型报错
报错原因
你写的[...]string{"Head", "Shoulder", "Knee", "Toe"}是固定长度为4的字符串数组,类型为[4]string,而String()方法声明的返回值类型是string,两者类型不匹配,因此编译器抛出类型不兼容错误。
修复方案
你需要用当前BodyPart类型的整数值作为下标,从数组中取出对应位置的字符串返回即可,建议额外增加边界校验,避免传入超出枚举范围的数值时触发数组越界panic。
修复后代码如下:
type BodyPart int const ( Head BodyPart = iota // Head = 0 Shoulder // Shoulder = 1 Knee // Knee = 2 Toe // Toe = 3 ) func (bp BodyPart) String() string { // 边界校验,避免越界panic if bp < Head || bp > Toe { return "Unknown" } // 用bp作为下标取数组元素,返回值为单个string类型 return [...]string{"Head", "Shoulder", "Knee", "Toe"}[bp] }
优化建议
你也可以把枚举字符串映射数组提前定义为全局变量,避免每次调用String方法都重复创建数组,性能更好:
// 提前定义全局的枚举字符串映射数组 var bodyPartStrings = [...]string{"Head", "Shoulder", "Knee", "Toe"} func (bp BodyPart) String() string { if bp < Head || bp > Toe { return "Unknown" } return bodyPartStrings[bp] }
内容的提问来源于stack exchange,提问作者Markus Bach
相关产品推荐
相关产品推荐

