Go语言学习笔记之函数(function)

函数

函数声明

函数的声明方式

func 函数名(形参变量 数据类型,...) (返回值 返回值类型) {
    // 函数体
}

Go语言函数的声明跟C语言类似,只不过函数用func关键字声明,Go语言支持多重返回值,

实例如下,

func Add(a int, b int) (ret int, err error) {
    return a + b , nil
}

如果参数列表中若干个相邻的参数类型相同,可以省略前面的变量类型。

func Add(a, b int) (ret int, err error) {
    return a + b, nil
}

如果返回值列表中多个返回值的类型相同,也可以同样方式合并

func Add(a, b int) int {
    return a + b, a * b
}
函数调用

调用当前文件(或者本包内)的函数

ret := Add(12, 23)

调用其他包内函数

import "myMath"         // 先去导入对应的包

ret := myMath.Add(12, 23)

注意,Go语言函数名字的大小写,提现了该函数的可见性。

Go语言可见性规则:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用,同样适用于变量和类型的可见性。

不定参数

不定参数是指函数传入的参数个数为不定数量。

实例如下,

func Add(args ...int) {
    fmt.Println(args)
}

Add(1, 2, 3)        // [1, 2, 3]

Go语言中采用...type语法糖来作为函数的不定参数,并且必须是最后一个参数。但不定参数本质上是一个数组切片(slice),也就是[]type

不定参数的传递

func Add(args ...int) {
    myFunc(args...)    // 原样传递

    myFunc(args[1:]...)   // 传递片段
}

任意类型的不定参数

如果传递任意类型,可以指定类型为interface{}

// 标准库里面fmt.Printf()函数原型
func Printf(format string, args ...interface{}) {
    // 函数体
}
多返回值

Go语言又一大特性就是多返回值,这个特性能使我们写出比其他语言更优雅、更简洁的代码。

func Add(a, b int) (int, error) {
    return a + b, nil
}

result, err := Add(1, 3)

函数的返回值被命名之后,它们的值在函数开始的时候会被自动初始化为空,在函数中执行不带任何参数的return语句时,会返回对应的返回值变量的值。

func Add(a, b int) (ret int, err error) {
    ret = a + b
    err = nil
    return
}

result, err := Add(1, 3)

result, _ := Add(1, 4)  // 如果调用方法具有多返回值,可以使用`_`跳过(或忽略)这个返回值
匿名函数

在Go语言里面,函数可以像普通变量一样被传递或使用,匿名函数可以直接赋值给一个变量。

Add := func(a, b int) int {
    return a + b
}

result := Add(1, 5)

匿名函数可以直接执行。

func(x int) {
    fmt.Println(x)
}(1)        // 花括号后直接跟参数列表表示函数调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值