2015-01-21 11:44
浏览 185


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 (

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)


图片转代码服务由CSDN问答提供 功能建议

当一个函数在Golang中返回多个变量时,这些变量的范围是什么? 在所附的代码中,我无法确定b的范围。

“ fmt” 
func addMulti(x,y int)(int,int){
 return(  x + y),(x * y)
func main(){
 // b变量的作用范围是什么?
a,b:= addMulti(1,2)
 \  n fmt.Printf(“%d%d 
 // b变量的作用范围是什么?
c,b:= addMulti(3,4)
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

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条)

相关推荐 更多相似问题