为什么我遇到了"multiple-value in single-value context"错误,尽管我在左侧收到了多个变量



我已经编写了两个函数v1GetSessionIDv1SessionIDforBind

/*
* v1GetSessionID
*/
func v1GetSessionID(c *gin.Context, 
app *firebase.App, 
client *firestore.Client, 
stripcallGetSession func() func(internalUserID string, customerID string) (sessionid string, err error)) (sessionid string, err error) {
defer erapse.ShowErapsedTIme(time.Now())
idToken := c.Param("idToken")
user, err := idToken2User(app, idToken)
if err != nil {return}
customerID, err := user.getCustomerID()
if err != nil {return}
sessionid, err = stripcallGetSession()(user.getInternalID(), customerID)
return
}
/*
* v1SessionIDforBind
*/
func v1SessionIDforBind(c *gin.Context, app *firebase.App, client *firestore.Client) {
defer erapse.ShowErapsedTIme(time.Now())
var requestBody JsonPurchaseBindSessionRequest
if err := c.ShouldBindJSON(&requestBody); err != nil {
okngErrorOut(c, err)
return
}
stripcallGetSession := func() func(internalUserID string, customerID string) (sessionid string, err error) {
return func(internalUserID string, customerID string)(sessionid string, err error){return stripeGetSessionIDforBind(requestBody, internalUserID, customerID)}
}
sessionid, err := v1GetSessionID(c, app, client, stripcallGetSession)()
if err != nil {
log.Println(err)
okngErrorOut(c, err)
} else {
c.JSON(http.StatusOK, gin.H{
"SessionID": sessionid,
})
}
}

在后一个函数的中间,我调用了前一个函数,如下所示;

sessionid, err := v1GetSessionID(c, app, client, stripcallGetSession)()

但是go编译器在单值上下文中将其指示为多值

go run *.go
# command-line-arguments
./v1handler.go:332:34: multiple-value v1GetSessionID() in single-value context

v1GetSessionID返回sessionid字符串的2个值,err error,我已通过会话ID收到它,err。那么为什么我会出现上面提到的错误呢?

go版本为:go1.14.4 linux/arm。

在对v1GetSessionID((的调用中有一组额外的parens。您用4个参数调用它,它将返回两个类似的值。但是,通过在初始调用之后加上额外的括号,您要求Go执行返回值,就好像它是一个函数一样,而这似乎正是编译器所抱怨的。简单示例:https://play.golang.org/p/ZX9kp6rxA09

只需去掉第二组括号,它就会编译:

sessionid, err := v1GetSessionID(c, app, client, stripcallGetSession)

最新更新