为了账号安全,请及时绑定邮箱和手机立即绑定

如何将参数作为参数传播

如何将参数作为参数传播

Go
动漫人物 2022-05-18 14:23:10
我有以下 Golang 代码:rows, err := common.GetAll(c, req, params, timer) return common.GenericRowMarshal(200, rows, err)我想弄清楚是否可以这样做:return common.GenericRowMarshal(200, common.GetAll(c, req, params, timer)...)但这不能编译:(它说“没有足够的论据来调用......”任何人都知道这是否可能以某种方式?
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

不,每次执行语句时,调用的函数值和参数都会像往常一样进行评估,请参阅doc:


作为一种特殊情况,如果一个函数或方法 g 的返回值数量相等并且可以单独分配给另一个函数或方法 f 的参数,则调用 f(g(parameters_of_g)) 将在绑定返回值后调用 f的 g 到 f 的参数的顺序。f 的调用除了 g 的调用外不能包含任何参数,并且 g 必须至少有一个返回值。如果 f 有一个 final ... 参数,则为其分配 g 的返回值,这些返回值在分配常规参数后仍然存在。


func Split(s string, pos int) (string, string) {

    return s[0:pos], s[pos:]

}


func Join(s, t string) string {

    return s + t

}


if Join(Split(value, len(value)/2)) != value {

    log.Panic("test fails")

}

如果 f 有一个最终...参数,则为其分配 g 的返回值,这些返回值在分配常规参数后仍然存在。


例如,以下代码有效:


package main


import "fmt"


func main() {

    f(200, g())

}

func f(i int, slice ...interface{}) {

    fmt.Println(i, slice) // 200 [[1 <nil>]]

}

func g() []interface{} {

    return []interface{}{1, nil}

}


查看完整回答
反对 回复 2022-05-18
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

我也试过这个,认为它可能会工作。目前(Go 1.13)只有当内部函数返回的参数与外部函数期望的完全一致时,您才能执行此操作。



查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信