Go语言-函数 | 青训营笔记

70 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第3天。

一、基本语法

func 函数名 (形参列表) (返回值类型列表) {
    执行语句...
    return + 返回值列表   
}

如果返回值只有一个,括号可以省略。

二、函数名

首字母大写,该函数可以被本包文件和其他包文件使用(public)。

首字母小写只能被本包文件使用(private)。

三、函数返回值

对于有多个返回值的函数,可以用 _ 不接收其中一些返回值。

sum, _ := cal(10, 20)

四、重载

函数名相同,形参列表不同称为重载。Go语言不支持重载。

五、可变参数

使用...,可以传入 0~n 任意多个数量的变量。

func test (args...int){
}

func main(){
    test()
    test(3)
    test(1, 10, 32)
}

在函数内部处理可变参数时,将参数当作切片处理。

六、参数传递

基本数据类型和数组都是值传递,即进行拷贝。

结构体也是值传递,说明切片也是拷贝。

七、切片

切片的三种创建方式:

1.var 切片名 []数据类型

2.切片名 := []类型{}

3.使用make()创建

len(s)返回长度,cap(s)返回容量。

八、函数也是一种数据类型

可以将函数赋值给一个变量,该变量就是一个函数类型的变量,通过变量可以对函数调用。

func test(num int){
}

func main(){
    a := test
    fmt.Printf("a的类型是:%T, test函数的类型是:%T", a, test)
    
    test(10)
    a(10)
}

函数可以作为参数传递。

func test2(num int, testFunc func(int)){
}

九、自定义数据类型

type 自定义类型名 数据类型

type myInt int

type myFunc func(int)

但myInt和int变量之间不能直接赋值,要强制类型转换。

十、函数返回值命名

传统写法:

func test1(a int, b int)(int, int){
    result1 := a + b
    result2 := a - b
    return a, b
}

新写法:使得return中不需要对应返回值列表的顺序。

func test2(a int, b int)(sum int, sub int){
    sub := a - b
    sum := a + b
    return
}