Go语言中如何将函数单个返回值赋值给结构体字段?
解决Go结构体初始化时取多返回值函数单个值的问题
这个问题我之前也碰到过,Go在结构体初始化的字段赋值上下文里,确实没法直接处理多返回值,而且还不让用_忽略错误的话,有两个简单可行的办法:
方案一:写一个忽略错误的包装函数
我们可以封装一个只返回数值的辅助函数,在内部处理strconv.Atoi的多返回值并忽略错误,之后在结构体初始化时直接调用这个函数:
import "strconv" type Data struct { a int } // 包装strconv.Atoi,仅返回数值,忽略错误 func atoiIgnoreErr(s string) int { num, _ := strconv.Atoi(s) return num } // 初始化结构体 data := Data{a: atoiIgnoreErr("1000")}
这种方式的好处是如果需要多次用到这个逻辑,可以复用包装函数,代码更整洁。
方案二:使用立即执行的匿名函数
如果只是单次使用,不想单独定义函数,可以直接在结构体字段赋值里嵌入一个立即执行的匿名函数,在函数内部处理多返回值:
import "strconv" type Data struct { a int } // 初始化结构体 data := Data{ a: func() int { num, _ := strconv.Atoi("1000") return num }(), // 这里的()表示立即执行该匿名函数 }
这样可以在一个初始化表达式里完成需求,不需要额外定义函数。
为什么原代码不行?
Go的结构体字段赋值要求右侧必须是单个匹配类型的值,而strconv.Atoi返回(int, error)两个值,在这个上下文里无法直接拆分(也不能用_来忽略其中一个,因为赋值给字段只能接收一个值),所以必须通过上面的方式把多返回值转换成单返回值后再赋值。
内容的提问来源于stack exchange,提问作者sepisoad
相关产品推荐
相关产品推荐

