Go语言编程(八)之函数

释放双眼,带上耳机,听听看~!

   函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

函数定义

   使用一个最简单的加法函数来进行详细说明:


1
2
1package main
2

1
2
1import (
2

1
2
1    "errors"
2

1
2
1    "fmt"
2

1
2
1)
2

1
2
1func Add(a int, b int) (ret int, err error) {
2

1
2
1    if a < 0 || b < 0 {
2

1
2
1        err = errors.New("Should be non-negative numbers!")
2

1
2
1        return
2

1
2
1    }
2

1
2
1    return a + b, nil // 支持多返回值
2

1
2
1}
2

1
2
1 如果参数列表中若干个相邻的参数类型相同,比如上面例子中的a和b,则可以在参数列表中省略前面变量的类型声明,如下所示:
2

1
2
1func Add(a, b int)(ret int, err error){
2

1
2
1    //
2

1
2
1}
2

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

如果一个函数只有一个返回值,也可以这么写:


1
2
1func Add(a, b int) int {
2

1
2
1    //
2

1
2
1}
2

函数调用

函数调用非常简单,只要事先导入该函数所在的包,就可以直接按照如下方式调用函数:


1
2
1import "mymath"    
2

1
2
1c := mymath.Add(1,2)
2

1
2
1 注意一点,小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用。这个规则也适用于类型和变量的可见性。
2

不定参数

不定参数是指传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受不定参数类型:


1
2
1func myfunc(args ...int) {
2

1
2
1    for _, arg := range args {
2

1
2
1        fmt.Println(arg)
2

1
2
1    }
2

1
2
1}
2

这段代码的意思是,函数myfunc()接受不定数量的参数,这些参数的类型全部是int,所以它可以用如下方式调用:


1
2
1myfunc(2, 3, 4)
2

1
2
1myfunc(1, 3, 7, 13)
2

形如…type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。

之前的例子中将不定参数类型约束为int,如果你希望传任意类型,可以指定类型为interface{}。下面是Go语言标准库中fmt.Printf()的函数原型:


1
2
1func Printf(format string, args ...interface{}) {
2

1
2
1    //
2

1
2
1}
2

1
2
1 以下是一个完整的例子:
2

1
2
1// varg1
2

1
2
1package main
2

1
2
1import (
2

1
2
1    "fmt"
2

1
2
1)
2

1
2
1func MyPrintf(args ...interface{}) {
2

1
2
1    for _, arg := range args {
2

1
2
1        switch arg.(type) {
2

1
2
1        case int:
2

1
2
1            fmt.Println(arg, "is an int value.")
2

1
2
1        case string:
2

1
2
1            fmt.Println(arg, "is a string value.")
2

1
2
1        case int64:
2

1
2
1            fmt.Println(arg, "is an int64 value.")
2

1
2
1        default:
2

1
2
1            fmt.Println(arg, "is an unknown type.")
2

1
2
1        }
2

1
2
1    }
2

1
2
1}
2

1
2
1func main() {
2

1
2
1    var v1 int = 1
2

1
2
1    var v2 int64 = 234
2

1
2
1    var v3 string = "hello"
2

1
2
1    var v4 float32 = 1.234
2

1
2
1    MyPrintf(v1, v2, v3, v4)
2

1
2
1}
2

多返回值

Go语言中支持多返回值函数。

如果调用方调用了一个具有多返回值的方法,但是却不想关心其中的某个返回值,可以简单地用一个下划线来跳过这个返回值。

匿名函数和闭包

匿名函数是指不需要定义函数名称的一种函数实现方式。

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ explicit关键字

2022-1-11 12:36:11

安全运维

高性能Web服务器Nginx的配置与部署研究(15)Upstream负载均衡模块

2021-8-18 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索