• Go 函数


    函数

    概念

    执行特定任务的代码块

    声明

    go语言至少有一个main函数

    1. 语法格式

      func funcName(parametername type1,parametername type2)(out1 type1,out2 type2){
          return value1,value2
      }
      
      1. func: 函数由func声明
      2. funName:函数名称,函数名称和参数列表一起构成函数签名
      3. parametername type: 参数列表,参数就像一个占位符,但函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型,顺序,及参数个数。参数是可选的,也就是说参数也可以不包含参数。
      4. out1 type1:返回类型,函数返回一列值。
      5. 上面返回值声明了两个变量out1和out2,如果不想声明也可以,直接写两个类型type1,type2也可以。
      6. 如果只有一个返回值且不声明返回值变量,那么你可以省略包裹返回值的括号(即一个返回值可以不声明)
    2. 参数

      1. 形式参数:定义函数时,用于接收外部传入的数据,叫做形式参数,简称形参

      2. 实际参数:调用参数时,传给形参的实际数据,叫做实际参数,简称实参

      3. 参数调用:

        1. 函数名称必须匹配
      4. 实参与形参必须一一对应:顺序,个数,类型

      5. 如果参数类型相同,还可以简化写法

           func getAdd(a,b int){
        	fmt.Printf("%d+%d=%d
        ",a,b,a+b)
           }
        
      6. 可变参数

        1. 语法

          func funName(arg ...int){
          
          }
          //注意,这里得参数全部都是int型得
          //在函数体中,arg是一个int型得切片
          //调用带可变参数得函数时,可以传入任意数量的参数,也可以不传入任何参数
          
          func getSum(args ...int){
          	fmt.Printf("%T",args) //[]int
          } 
          
        2. 常用可变参的函数

          Println() Printf() Print()

          append()

        3. 将切片作为参数,调用可变参函数

          s1 := []int{1,2,3}
          getSum(s1...) //切片变量后加上三个点...(s1...),才能作为可变参数传入函数
          
        4. 注意事项

          1. 如果一个函数的参数是可变参数,同时还有其他参数,可变参数要放在参数列表的最后
          2. 一个参数列表中,最多只能有一个可变参数
    3. 参数传递

      1. 数据类型

        一. 按照数据类型来分:

        ​ 基本数据类型:

        ​ int,float,string,bool

        ​ 符合数据类型:

        ​ array,slice,map,struct,interface

        二.按照数据的存储特点来分:

        ​ 值类型的数据:操作的数值本身

        ​ int,float,bool,string,array,struct

        ​ 引用类型的数据:操作的是数据的地址

        ​ slice,map,chan

      2. go函数的参数也是存在值传递和引用传递的

        1. 值传递:传递的是数据的副本,修改数据,对于原始数据没有影响

          值类型的数据,默认都是值传递

        2. 引用传递:传递的是数据的地址。导致多个变量指向同一块内存,通过参数传递的是地址副本。

          引用类型的数据,默认都是引用传递。

    4. 函数返回值

      1. 定义

        一个函数被调用后,返回给调用处的执行结果,叫做函数的返回值。调用处需要用变量接收返回结果

      2. 无定义变量返回值

        func getAdd(a,b int) (int) {
            int sum = a + b
        	fmt.Printf("%d+%d=%d
        ",a,b,sum)
            return 
        }
        
      3. 有定义变量的返回值

        //这种写法实际就是现在函数中定义了一个变量sum,值也就是这种类型的零值
        func getSum(args ...int)(sum int) {//定义函数时,指明要返回的数据是哪一个。
        	for _,v := range args {
        		//fmt.Println(v)
        		sum += v
        	}
        	return
        }
        
        //如果函数末尾使用了return 0,则getSum函数会返回0,不再是sum的真实值了
        
    5. 多返回值

      func getSum2()(int ,int){ //无定义变量形式
      	return 0,2
      }
      
      func getSum3()(a,b int){//有定义变量形式
      	a,b = 1,2
      	return
      }
      
    6. return语句

      1. 一个函数定义了返回值,必须使用return语句将结果返回调用处。

      2. return后的数据必须与函数定义一致:个数,类型,顺序

      3. 可以使用_,舍弃多余的返回值

      4. 如果函数定义定义了返回值,那么函数中有分支,循环,那么要保证,无论执行了那个分支,都要有return语句被执行到。

      5. 如果函数没有定义返回值,那么函数中也可以使用return,专门用于结束函数的执行。

    函数中变量作用域

    1. 作用域

      变量可以使用的变量

    2. 局部变量

      函数内部定义的变量

      变量在哪里定义,就只能在哪个范围内使用,超出这个范围,我们认为变量就被销毁了

      范围内部定义的变量会覆盖范围外部的同名变量

    3. 全局变量

      函数外部定义的变量

      短变量不能定义在函数外部

      所有函数都可以使用,而且共享这一份数据

  • 相关阅读:
    React实现新闻网站--使用动态路由获取不同列表内容
    Bootstrap4 轮播+模态框+提示框+弹出框
    JDK 升级问题小结
    JDK8 指南(译)
    如何学习一门编程语言
    redis 系列5 数据结构之字典(上)
    sql server 临时表(上) Tempdb概述
    redis 系列4 数据结构之链表
    redis 系列3 数据结构之简单动态字符串 SDS
    redis 系列2 知识点概述
  • 原文地址:https://www.cnblogs.com/henryno12/p/12501899.html
Copyright © 2020-2023  润新知