• 03-函数


    函数的声明

    在Go语言中,函数定义语法如下:

    func 函数名(参数1 类型,参数2 类型) (返回值类型){
    
          //函数体(具体实现的功能)
        返回值 }

    函数中的参数列表和返回值并非是必须的,所以下面代码示例有些是不带的。

    代码示例:

    1.无参数,无返回值

    package main
    import "fmt"
    
    func main() {
        test()  #调用test函数
    }
    
    func test()  {  #定义的test函数,无返回值,无参数
        fmt.Println("xxxxxx")
    }
    
    #结果
    xxxxxx

    2.带参数,无返回值

    package main
    import "fmt"
    
    func main() {
        test(2,5)
    }
    
    func test(a int,b int)  {   #如果参数类型是一样的,可以写成 a,b int 
        fmt.Println(a+b)
    }
    
    #结果
    7

    3.带参数,有一个返回值

    package main
    func main() {
        print(test(3,9))
    }
    
    func test(a ,b int) int {  #有返回值时,必须指定返回值的数据类型
        return a+b
    }

    4.带参数,有多个返回值

    package main
    import "fmt"
    func main() { var a int var b string a,b=test(3,9) #a,b参数接收 fmt.Print(a,b) } func test(a int,b int) (int,string) { #返回多个值,需要用(),接收也需要两个参数接收 return a+b,"aaa" #返回一个int,一个string类型值 }

    5.命名返回值

    package main
    import "fmt"
    
    func main() {
        fmt.Print(test1(1,2))
    }
    
    func test1(a,b int) (j int, k string) {  #命名返回值j,k
        j=a+b
        k="xxx"
        return   #不需要明确指定返回值,默认返回j,k
    }
    #结果
    3xxx

    不定长参数

    package main
    import "fmt"
    
    func main() {
        test1(1,"aaa")
    }
    
    //不定长参数
    func test1(a ...interface{})  {   #也可以写成a ...int   接收int类型参数
        fmt.Println(a)
    }
    #结果
    [1,aaa]

    函数高级

    内层函数定义在函数内部的函数

    go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字

    func test(a int)  {
        func() {    #定义在内层的函数不能有名字
            fmt.Println("我是内层函数")
        }()
    }

    闭包函数:定义在函数内部,对外部作用域有引用

    在go语言中,函数是一等公民,可以把函数赋值给一个变量,函数就是一等公民

    package main
    import "fmt"
    
    //闭包函数  传入int类型,返回值是函数
    func test3(a int) func() {   # a是参数,func()是返回值类型是个函数
    
        b:= func() {
            fmt.Println(a)
            fmt.Println("我是闭包函数")
        }
        return b
    }
    func main() {
        a:=test3(3)  #结果是返回值函数b
        a()   #加括号调用函数b
    }
    
    #结果
    3
    我是闭包函数

    闭包函数:传入函数,返回值是函数

    package main
    import "fmt"
    
    //定义一个函数,传入函数,返回值是函数
    func test4(a func()) func()  {
        b:= func() {
            fmt.Println("我先执行")
            a()
            fmt.Println("函数执行完了")
        }
        return b
    }
    func test5()  {
        fmt.Println("xxx")
    }
    
    func main() {
        a:=test5   #a是test5函数
        a=test4(a)  #把函数a当做参数传入到test4中,获得返回值b
        a()       #返回值b加括号调用,就是test4中定义的b函数
    }
  • 相关阅读:
    [MST] Test mobx-state-tree Models by Recording Snapshots or Patches
    [MST] Attach Behavior to mobx-state-tree Models Using Actions
    [MST] Describe Your Application Domain Using mobx-state-tree(MST) Models
    [Angular] Configure an Angular App at Compile Time with the Angular CLI
    [Angular] Configure an Angular App at Runtime
    [Test] Easy automated testing in NodeJS with TestCafe
    [React] Optimistic UI update in React using setState()
    [Javascript] Required function arguments in Javascript
    [Transducer] Lazyness in Transduer
    [Transducer] Create a Sequence Helper to Transduce Without Changing Collection Types
  • 原文地址:https://www.cnblogs.com/wangcuican/p/12016524.html
Copyright © 2020-2023  润新知