Go语言中如何将Day枚举类型转换为*Mappings指针类型
Go语言Day枚举转*Mappings类型指针赋值解决方案
问题根因
你代码运行异常的核心原因是destObj.day作为*Mappings类型,初始化后默认值为nil,直接调用To方法时,方法接收器r本身就是nil,对nil指针执行解引用操作*r必然会触发错误,和类型转换逻辑本身无关。
可行解决方案
方案1:调整调用逻辑,提前初始化指针
不需要修改原有转换方法,只需要在调用前给destObj.day分配合法内存空间即可:
func main() { type A struct { day Day } type B struct { day *Mappings } sourceObj := A{day: MONDAY} destObj := B{} // 先给指针对象分配内存 destObj.day = new(Mappings) destObj.day.To(sourceObj.day) }
方案2:调整转换逻辑为普通函数(更符合Go惯用写法)
如果不想每次调用前都手动初始化指针,可以把转换逻辑改成返回*Mappings的普通函数,天然支持返回nil满足空值需求:
// 新增转换函数,不修改原有类型定义 func DayToMappings(m Day) *Mappings { switch m { case MONDAY: res := MON return &res case TUESDAY: res := TUE return &res default: // 无匹配项返回nil即可 return nil } } func main() { type A struct { day Day } type B struct { day *Mappings } sourceObj := A{day: MONDAY} destObj := B{} // 直接赋值即可,无需手动初始化指针 destObj.day = DayToMappings(sourceObj.day) }
内容的提问来源于stack exchange,提问作者BLACKMAMBA
相关产品推荐
相关产品推荐

