go - 从多重返回函数中命名接收变量
问题描述
Go 允许多个命名返回值,但是接收变量呢?当返回值被杂乱无章时,它们是否受到保护?
假设我们从这个开始:
func foo() (i int, j int) {
i = 1
j = 2
return
}
a, b := foo()
现在,如果其他一些编码人员过来并对 foo 的定义进行以下更改怎么办:
func foo() (j int, i int) {
我的调用函数无效。那么,是否也可以从调用方命名返回的值。例如,如果我这样称呼它:
(a:i, b:j) := foo()
然后我会将它们附加到命名的返回值,而不是按照它们返回的顺序分配它们。
那么,有没有办法解决这个问题呢?
解决方案
这与重新排列输入参数没有什么不同。通常,除非您打算进行重大更改,否则不要这样做。但是如果你想通过名称而不是位置来处理事情,你需要一个结构。例如,您可以使用匿名结构:
func foo() struct {
i int
j int
} {
return struct {
i int
j int
}{1, 2}
}
func main() {
result := foo()
fmt.Println(result.i, result.j)
}
当然,如果你在其他地方使用它,你也可以命名结构,但如果你只是想命名字段,则没有必要。
推荐阅读
- c# - 如何使用数据网格视图列值按升序排序?
- javascript - 如何在 JS 中映射对象数组并为每个对象获取网络数据?
- r - 如何使用 r 中的 if-else 循环替换时间序列数据的缺失值
- python - 如何从使用 plot_date 生成的图形中删除点?
- c++ - 使用 OpenSSL 作为静态库在 Visual Studio 中编译项目
- apache - Apache 为每个 WebSocket 连接保留一个活动工作器
- svn - 如何使用最后 2 个版本的 SVN 存储库打印所有文件的属性?
- android - C++ 信号处理程序无法通知 Java 端
- f# - 在 F# 类型提供程序中,如何将静态类添加到提供的类型?
- perl - Perl中以qw表示的数组数组