函数调用机制
为了让大家更好的理解函数调用过程,看两个案例,并画出示意图,这个很重要。
1)传入一个数+1             test

对上图说明:
      (1)在调用一个函数时,会给该函数分配一个新的空间,编译器会通过自身的处理,让这个新的空间和其它栈的空间区分开来。
      (2)在每个函数对应的栈中,数据空间是独立的,不会混淆。
      (3)当一个函数调用完毕(执行完毕)后,程序会销毁这个函数对应的栈空间。
2)计算两个数,并返回 getSum
//一个函数 test
func test(n1 int) {
	  n1 += 1
	  fmt.Println("test() n1=", n1) //? 输出结果=11
}
//一个函数 getSum
func getSum(n1 int, n2 int) int {
	  sum := n1 + n2
	  fmt.Println("getSum sum = ", sum)
	  //当函数有return语句时,就所将结果返回给调用者
	  //即谁调用我,就返回给谁
	  return sum
	  //也可以写成 return n1 + n2
}
func main() {
	  var n1 int = 10
	  //调用test
	  test(n1)
	  fmt.Println("main() n1=", n1) //? 输出结果= ?
	  sum := getSum(10, 20)
	  fmt.Println("main sum = ", sum)
}
return语句:
基本语法:
Go函数支持返回多个值,这一点是其它编程语言没有的。
func 函数名 (形参列表) (返回值类型列表) {
          语句...
          return 返回值列表
}
1)如果返回多个值时,在接收时,希望忽略某个返回值,则使用 _ 符号表示占位忽略。
2)如果返回值只有一个,(返回值类型列表) 可以不写() 
案例1:
//声明函数 getSumAndSub
func getSumAndSub(n1 int, n2 int) (int, int) {
	  sum := n1 + n2
	  sub := n1 - n2
	  return sum, sub
}
func main() {
	
	  //调用getSumAndSub
	  res1, res2 := getSumAndSub(1, 2)
	  fmt.Printf("res1 = %v , res2 = %v", res1, res2)
}
案例2:
细节说明:希望忽略某个返回值, 则使用 _ 符号表示占位忽略
//声明函数 getSumAndSub
func getSumAndSub(n1 int, n2 int) (int, int) {
	  sum := n1 + n2
	  sub := n1 - n2
	  return sum, sub
}
func main() {
	  res3, _ := getSumAndSub(2, 3)
	  fmt.Printf("res3 = %v", res3)
}

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号