Go基础07 函数

2017-08-22 18:57:57

函数最重要的目的是方便我们重复使用相同的一段程序。

将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。

  • 函数的定义
    首先,我们要定义一个函数, 以说明这个函数的功能。
    func function_name( [parameter_list] ) [return_types] {
    函数体
    }
    func:函数由 func 开始声明
    function_name:函数名称,函数名和参数列表一起构成了函数签名
    parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数
    return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的
    函数体:函数定义的代码集合
    下面来看个例子

    1
    2
    3
    4
    5
    func sum(a, b int) int {
    var c int
    c = a + b
    return c
    }

    这个函数的功能是求两个数的和。

  • 函数调用和参数传递
    当创建函数时,你定义了函数需要做什么,通过调用改函数来执行指定任务。
    调用函数,向函数传递参数,并返回值,例如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package main

    import "fmt"

    func main() {
    var a, b int = 3 ,5
    var ret int
    ret = sum(a, b)
    fmt.Println("sum is %d", ret)
    }

    func sum(a, b int) int {
    var c int
    c = a + b
    return c
    }
  • 函数参数
    值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
    引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
    默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
    不管是指针,引用类型还是其他类型参数,都是值拷贝传递.区别是拷贝的是对象本身还是拷贝指针

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package main

    import "fmt"

    func main() {
    a := 100
    p := &a

    fmt.Printf("variable a pointer: %p, value: %d", &a, a)
    fmt.Printf("actual parameter p pointer: %p, value: %p", &p, p")
    show(p)
    }
    func show(x *int) {
    fmt.Printf("formal parameter x pointer: %p, value:%p", &x, x)
    }

    [tiger@bogon tiger]$ go run fun_add.go
    variable a pointer:0xc42000e258,value:100
    actual parameter p pointer: 0xc42000c028, value: 0xc42000e258
    formal parameter x pointer: 0xc42000c038, value:0xc42000e258

    在调用函数时,新建立了x的内存,将参数p的值复制进去.这样x就保存了a的地址

  • 总结
    函数的目的: 提高程序的重复可用性。
    练习:
    写一个判断闰年的函数,参数为年、月、日。若是是闰年,返回True


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。