• 函数调用机制


    为了让大家更好的理解函数调用过程,看两个案例,并画出示意图,这个很重要。
    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)
    }

  • 相关阅读:
    不负时光,不负自己
    理解无偏估计(unbiased estimation)
    Latex Error:‘acmart.cls’ not found 解决方案:
    Dark theme for Texstudio
    马尔可夫毯(Markov Blanket)
    时间复杂度和空间复杂度的简单讲解
    应用层级时空记忆模型(HTM)实现对实时异常流时序数据检测
    ElasticSearch集群状态查看命令大全
    ElasticSearch API 之 UPDATE
    ElasticSearch API 之 DELETE
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11343482.html
Copyright © 2020-2023  润新知