确定go函数返回的内容

确定go函数返回的内容,go,Go,鉴于此功能: func (c *Firehose) PutRecord(input *PutRecordInput) (*PutRecordOutput, error) { req, out := c.PutRecordRequest(input) return out, req.Send() } 我发现这种调用是有效的: err, _ := svc.PutRecord(putRecordInput) 但是,我仍然不太清楚这在函数签名中意味着什么: (*PutRecordOu

鉴于此功能:

func (c *Firehose) PutRecord(input *PutRecordInput) (*PutRecordOutput, error) {
    req, out := c.PutRecordRequest(input)
    return out, req.Send()
}
我发现这种调用是有效的:

err, _ := svc.PutRecord(putRecordInput)
但是,我仍然不太清楚这在函数签名中意味着什么:

(*PutRecordOutput, error)
我的问题是,我能否始终通过返回行中指定的内容来确定函数返回的内容,在这种情况下,返回行是:


return out,req.Send()

函数签名的这一部分正是函数返回的内容

(*PutRecordOutput, error)
因此,这个函数将返回一个指向
PutRecordOutput
的指针,加上一个
错误
(按照惯例,如果没有发生错误,则返回为
nil

如果您查看函数的源代码,
return
语句必须与之一致,这样也可以帮助您理解返回值是如何生成的

但是,请注意,在某些情况下,您可以命名输出参数,例如:

(output *PutRecordOutput, err error)
在这种情况下,
output
err
将是函数中的有效局部变量,您可能会看到如下简单的返回语句:

return
请记住,一个人可能会隐含着这样做:

return output, err
err,\u:=svc.PutRecord(putRecordInput)
->
err
并没有指向每个人都会期望的内容