美文网首页工作生活
Golang笔记: 函数(func)和方法(method)

Golang笔记: 函数(func)和方法(method)

作者: Boston199834 | 来源:发表于2019-07-16 08:59 被阅读0次

            函数是组织好的,可以重复利用的,用来实现单一或相关联功能的代码段,可以提高应用的模块性和代码的重复利用率。

    函数声明(定义)

            函数的基本组成为:关键字(func),函数名,参数列表,返回值列表,函数体,返回语句。

            普通函数声明(定义)

                func  函数名  (形参列表)  (返回值列表) {

                        函数体

                }

            return 可以作为语句的结束退出,也带一个或多个作为返回值给调用者使用(函数在声明时,包含了返回值列表,那么函数必须以 return 语句结尾)

       函数的返回值

            Go语言支持多返回值,通常以返回值的最后一个返回参数返回执行中可能发生的错误。

            例:conn, err   := connectToNetWork()

            1:同一种类型的返回值

           如果返回值是同一种类型,则用括号将多个返回值类型括起来,return 返回时,返回值顺序与函数声明的返回类型顺序一致,示例代码如下

                    func typedTowValues() (int, int) {

                            return  1,  2

                        }

                2:带有变量名的返回值

                Go语言支持对返回值进行命名,这样返回值就和参数一样拥有参数变量名和类型。

                下例中,可以直接对返回值列表中的a,b进行赋值,从而在 return中不填写返回值列表 

                func nameRetValue() (a,b int) {

                    a = 1

                    b = 2

                    return 

                    }

            调用函数

            返回值变量列表 =  函数名(参数列表)

    函数值传递和引用传递 

            值传递:也就是传递参数的副本,函数接收参数副本之后,在使用变量的过程中只能对副本进行修改,但是不会影响到原来的值,如   func(arg1)

            引用传递:可以直接修改参数的值,而不是对参数副本进行操作,比如在变量名前加 & 符号传递给函数,就是按引用传递,此时传给函数的是一个指针,如 func(&arg1)

            引用传递消耗比值传递少,因此函数调用时,像slice,map,interface,channel类型都是使用引用传递(即使没有显示的指出指针)

    函数变量 -- 将函数作为值保存到变量中

            Go语言中,函数也是一种类型,也可以和其他变量一样保存在变量中

            例:func fire() {

                        fmt,Println("fire")

                }

                func main() {

                    var f func()    //声明未func()类型,此时 f 被俗称为 "回调函数" ,f 的值为nil

                    f = fire            //将fire() 函数名作为值,赋给f变量, 此时 f的值为fire()函数

                    f()                    // f 变量进行函数调用,实际上调用的是fire()函数

                }

    匿名函数

            匿名函数是指不需要定义函数名的一种函数实现方式,即函数可以像普通变量一样传递或使用

            例:  func (参数列表) (返回值列表){

                    函数体

            }

            1:在定义时调用匿名函数

         例如: func(data int) {

                        fmt.Println("this is go", data)

                    } (100)   //表示对匿名函数进行调用

                2:将匿名函数赋值给变量

                    f := func(data int) {  // 将匿名函数体保存到f()中

                            fmt.Println("hello", data)

                    }

                        f(100)  // 使用f()调用

         


    相关文章

      网友评论

        本文标题:Golang笔记: 函数(func)和方法(method)

        本文链接:https://www.haomeiwen.com/subject/aemwcctx.html