golang函数

2019-12-30  本文已影响0人  程序小白菜

函数是构建 Go 程序的基础部件

函数的定义

func function_name( [parameter list] ) [return_types] {
函数体
}

函数的解析:

func subroutine(in int) { return }
func identity(in int) int { return in }

函数的执行顺序

Go语言程序的初始化和执行总是从main.main函数开始的。但是如果main包导入了其它的包,则会按照顺序将它们包含进main包里(这里的导入顺序依赖具体实现,一般可能是以文件名或包路径名的字符串顺序导入)。如果某个包被多次导入的话,在执行的时候只会导入一次。当一个包被导入时,如果它还导入了其它的包,则先将其它的包包含进来,然后创建和初始化这个包的常量和变量,再调用包里的init函数,如果一个包有多个init函数的话,调用顺序未定义(实现可能是以文件名的顺序调用),同一个文件内的多个init则是以出现的顺序依次调用(init不是普通函数,可以定义有多个,所以也不能被其它函数调用)。最后,当main包的所有包级常量、变量被创建和初始化完成,并且init函数被执行后,才会进入main.main函数,程序开始正常执行。

函数的调用-调用函数,向函数传递参数,并返回值

package main

import "fmt"

func main() {
    var a, b = 10, 15
    var ret int

    ret = max(a, b)
    fmt.Printf( "最大值是 : %d\n", ret )
}

func max(num1, num2 int) int {
    /* 定义局部变量 */
    var result int

    if (num1 > num2) {
        result = num1
    } else {
        result = num2
    }
    return result
}

func rec(i int) {
i f i == 10 {
return
}
rec(i+1)
fmt.Printf("%d ", i)
}

作用域

在 Go 中,定义在函数外的变量是全局的,那些定义在函数内部的变量,对于函数来说
是局部的。如果命名覆盖——一个局部变量与一个全局变量有相同的名字——在函数
执行的时候,局部变量将覆盖全局变量。

package main

import "fmt"

var a int

func main() {
    a = 5
    fmt.Println(a)
    f()
}

func f() {
    a := 6
    fmt.Println(a)
    g()
}

func g() {
    fmt.Println(a)
}

多值返回

Go 函数可以返回多个值

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Google", "Runoob")
   fmt.Println(a, b)
}

变参

func myfunc(arg ...int) { }
arg ...int 告诉 Go 这个函数接受不定数量的参数。注意,这些参数的类型全部是 int

值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

函数的用法

函数用法 描述
函数作为另外一个函数的实参 函数定义后可作为另外一个函数的实参数传入
闭包 闭包是匿名函数,可在动态编程中使用
方法 方法就是一个包含了接受者的函数
上一篇下一篇

猜你喜欢

热点阅读