doutuo3899 2015-01-21 11:44
浏览 193
已采纳

Golang:函数的多个返回值的范围

When a function returns more than one variable in Golang, what's the scope of the variables? In the code attached, I can't figure out the scope of b.

package main

import (
    "fmt"
)

func addMulti(x, y int) (int, int) {
    return (x + y), (x * y)
}

func main() {
    //what is the scope of the b variable here?
    a, b := addMulti(1, 2)

    fmt.Printf("%d %d
", a, b)

    //what is the scope of the b variable here?
    c, b := addMulti(3, 4)

    fmt.Printf("%d %d
", c, b)

}   
  • 写回答

3条回答 默认 最新

  • douken0530 2015-01-21 11:51
    关注

    We're not talking about the scope of the return value of a function but rather the scope of the variable you assign the return value to.

    The scope of the variable b in your case is the function body, from the point at which you declare it.

    At first you do it at this line:

    a, b := addMulti(1, 2)
    

    But then you use another Short Variable declaration at this line:

    c, b := addMulti(3, 4)
    

    which - since b is already declared - just assigns a new value to it. b will be in scope until the end of your main() function. Quoting from the Go Language Specification:

    Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于大棚监测的pcb板设计
  • ¥20 sim800c模块 at指令及平台
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计