zoukankan      html  css  js  c++  java
  • 函数

    • 函数:一段代码块

    • 所有的流程控制代码和业务代码都只能写在函数内部

    • 为什么使用函数:

      • 把一个功能提出作为一个函数便于后期维护,结构清晰

    • 函数声明的语法

      • 函数声明后不会执行,必须调用后才会执行

    func 函数名(参数列表) 返回值{
      //函数体
    }
    • 函数调用的语法
    返回值:=函数名(参数)

    无参数无返回值函数

    • 函数可以有参数也可以没有参数,可以有返回值也可以没有返回值

    func main() {
        demo1()
    }
    func demo1(){
        fmt.Println("执行demo1函数")
    }
    
    //上面代码等同于
    //func main(){
    //    fmt.Println("执行demo1函数")
    //}

    有参数函数

    • 函数的参数可以有多个,且每个参数类型都可以不同

    • 参数表示调用函数方想要给函数内部传递的值,给函数使用的.

    • 声明函数时的参数叫做形参数,调用函数时参数叫做实参

    func main() {
        i:=5
        s:="smallming"
        show(s,i)
    }
    func show(name string,age int){
        fmt.Println("姓名:",name,"年龄",age)
    }

    有返回值函数

    • 函数的返回值是给调用方返回的数据,给调用方使用的.

    • 具有返回值的函数,必须要有return

    func main() {
        a, b := 1, 2
        fmt.Println(add(a,b))
    }
    func add(c, d int) int {
        return c + d
    }
    • 也可以在返回值类型前面添加变量,return关键字后不写内容,表示变量是什么返回值什么
    func main() {
        a, b := 1, 2
        fmt.Println(add2(a,b))
    }
    
    func add2(c, d int) (sum int) {
        sum = c + d
        return
    }

    多返回值函数

    • 在Go语言中每个函数声明时都可以定义成多返回值函数

    • Go语言中所有的错误都是通过返回值返回的

    • 声明多返回值函数的语法

    func 函数名(参数列表) (返回值,返回值){
      //函数体
    }
    • 调用函数的语法
    变量,变量:=函数名(参数)
    • 调用函数时如果不想接收可以使用下划线占位
    变量,_:=函数名(参数)
    • 理论上函数返回值个数可以无限多个,但是一般不去定义特别多个返回值(用结构体代替多返回值)

    代码演示

    • 函数的返回值可以不接收,表示执行函数

    • 函数的返回值如果接收,用于接收返回值的变量个数与返回值个数相同

    • 不想接收的使用占位符(_)占位

    func main() {
        //不接收函数返回值
        demo()
    
        //每个返回值都接收
        a, b := demo()
        fmt.Println(a, b)
    
        //不希望接收的返回值使用下划线占位
        c, _ := demo()
        fmt.Println(c)
    }
    
    func demo() (string, int) {
        return "smallming", 17
    }
    • 多返回值函数也可以给返回值定义变量,return后面就不需要编写内容
    func demo() (name string, age int) {
        name = "smallming"
        age = 17
        return
    }

    可变参数函数

    • Go语言支持可变参数函数

    • 可变参数指调用参数时,参数的个数可以是任意个

    • 可变参数必须在参数列表最后的位置,在参数名和类型之间添加三个点表示可变参数函数

    func 函数(参数,参数,名称 ... 类型 ){
        //函数体
    }
    • 输出语句就是可变参数函数,源码如下
    func Println(a ...interface{}) (n int, err error) {
        return Fprintln(os.Stdout, a...)
    }
    • 声明函数时,在函数体把可变参数当作切片使用即可

    代码示例

    • 声明可变参数声明与调用

    func main() {
        demo("看书", "写代码", "看视频")
    }
    
    func demo(hover ... string) {
        for a, b := range hover {
            fmt.Println(a, b)
        }
    }
    • 可变参数必须存在其他参数后面,一个函数不能有多个可变参数.

      • 因为前面普通参数个数是确定的,编译器知道,哪个实参给哪个形参

    func main() {
        demo("张三", "看书", "写代码", "看视频")
    }
    
    func demo(name string, hover ... string) {
        fmt.Println(name, "的爱好是")
        for a, b := range hover {
            fmt.Println(a, b)
        }
    }

    匿名函数

    • 匿名函数就是没有名称的函数

    • 正常函数可以通过名称多次调用,而匿名函数由于没有函数名,所以大部分情况都是在当前位置声明并立即调用(函数变量除外)

    • 匿名函数声明完需要调用,在函数结束大括号后面紧跟小括号

    func (){
      
    }()//括号表示调用
    • 匿名函数都是声明在其他函数内部

    匿名函数演示

    • 无参数匿名函数

      func main(){
         func(){
            fmt.Println("这是匿名函数")
         }()//括号表示调用
      }
    • 有参数匿名函数
    func main() {
       func(s string) {
          fmt.Println(s, "这是匿名函数")
       }("传递参数") //调用时传递参数
    }
    • 有参数有返回值匿名函数
    func main() {
        r := func(s string) int {
            fmt.Println(s, "这是匿名函数")
            return 110
        }("传递参数") //调用时传递参数
        fmt.Println(r)
    }

     

  • 相关阅读:
    MySQL 数据库主从复制架构
    程序员的双十一
    MySQL 数据库事务与复制
    十字路口的程序员
    瞬息之间与时间之门
    HDFS 与 GFS 的设计差异
    HDFS 异常处理与恢复
    HDFS Client 设计实现解析
    HDFS DataNode 设计实现解析
    HDFS NameNode 设计实现解析
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12093478.html
Copyright © 2011-2022 走看看