设为首页 加入收藏

TOP

Go学习笔记2(三)
2023-09-09 10:25:25 】 浏览:203
Tags:习笔记
func main(){ for i := 1; i <= 100; i++ { fmt.Println(i) if i == 14 { return //结束当前的函数 } } fmt.Println("hello golang") }

八、函数

1.基本语法

func   函数名(形参列表)(返回值类型列表){
                        执行语句..
                        return + 返回值列表
}
//自定义函数:功能:两个数相加:
func call01 (num1 int ,num2 int) (int){//如果返回值类型就一个的话,那么()是可以省略不写的
	return num1 + num2
}

2.返回多个

image-20230906155548106

省略返回值:

image-20230906155610256

3.不支持重载

Golang中函数不支持重载

image-20230906161442652

4.可变数量的形参

Golang中支持可变参数 (如果你希望函数带有可变数量的参数)

package main
import "fmt"
//定义一个函数,函数的参数为:可变参数 ...  参数的数量可变
//args...int 可以传入任意多个数量的int类型的数据  传入0个,1个,,,,n个
func test (args...int){
        //函数内部处理可变参数的时候,将可变参数当做切片来处理
        //遍历可变参数:
        for i := 0; i < len(args); i++ {
                fmt.Println(args[i])
        }
}
func main(){	
        test()
        fmt.Println("--------------------")
        test(3)
        fmt.Println("--------------------")
        test(37,58,39,59,47)
}

5.修改数值使用地址传递

基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。

image-20230906161551202

以值传递方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果来看类似引用传递。

image-20230906161558638

6.函数添加变量名称

在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。

package main
import "fmt"
//定义一个函数:
func test(num int){
        fmt.Println(num)
}
func main(){
        //函数也是一种数据类型,可以赋值给一个变量	
        a := test//变量就是一个函数类型的变量
        fmt.Printf("a的类型是:%T,test函数的类型是:%T \n",a,test)//a的类型是:func(int),test函数的类型是:func(int)
        //通过该变量可以对函数调用
        a(10) //等价于  test(10)
}

7.函数作为形参

函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用
(把函数本身当做一种数据类型)

package main
import "fmt"
//定义一个函数:
func test(num int){
        fmt.Println(num)
}
//定义一个函数,把另一个函数作为形参:
func test02 (num1 int ,num2 float32, testFunc func(int)){
        fmt.Println("-----test02")
}
func main(){
        //函数也是一种数据类型,可以赋值给一个变量	
        a := test//变量就是一个函数类型的变量
        fmt.Printf("a的类型是:%T,test函数的类型是:%T \n",a,test)//a的类型是:func(int),test函数的类型是:func(int)
        //通过该变量可以对函数调用
        a(10) //等价于  test(10)
        //调用test02函数:
        test02(10,3.19,test)
        test02(10,3.19,a)
}

8.自定义数据类型

为了简化数据类型定义,Go支持自定义数据类型

基本语法: type 自定义数据类型名 数据类型

可以理解为 : 相当于起了一个别名

例如:type mylnt int -----》这时mylnt就等价int来使用了.

image-20230906161804692

支持对函数返回值命名

image-20230906161819051

升级写法:对函数返回值命名,里面顺序就无所谓了,顺序不用对应

image-20230906161836775

9.包的引入

不可能把所有的函数放在同一个源文件中,可以分门别类的把函数放在不同的原文件中

image-20230906162301225

1.简单实例

项目结构

image-20230906162410986

main包

image-20230906162424379

db包

image-20230906162436398

2.包的命名

可以给包取别名,

取别名后,原来的包名就不能使用了

image-20230906162651734

10.init函数

init函数:初始化函数,可以用来进行一些初始化的操作
每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用。

image-20230906163005269

11.包执行流程

image-20230906163021859

12.多个包执行流程

image-20230906163119067

image-20230906163127578

13.匿名函数

在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次(用的多)

image-20230906165946514

将匿名函数赋给一个变量(该变量就是函数变量了),再通过该变量来调用匿名函数(用的少)

image-20230906170016402

让一个匿名函数,可以在整个程序中有效呢?将匿名函数给一个全局变量就可以了

package main
import "fmt"
var Func01 = func (num1 int,num2 int) int{
        return num1 * num2
}
func main(){
        //定义匿名函数:定义的同时调用
        result := func (num1 int,num2 int) int{
                return num1 + num2
        }(10,20)
        fmt.Println(result)
        //将匿名函数赋给一个变量,这个变量实际就是函数类型的变量
        //sub等价于匿名函数
        sub := func (num1 int,num2 int) int{
                return num1 - num2
        }
        //直接调用sub就是调用这个匿名函数了
        result01 := sub(30,70)
        fmt.Println(result01)
        result02 := sub(30,70)
        fmt.Println(result02)
        result03 := Func01(3,4)
        fmt.Println(result03)
}

14.闭包

闭包就是一个函数和与其相关的引用环境组合的一个整体

package main
import "fmt"
//函数功能:求和
//函数的名字:getSum 参数为空
//getSum函数返回值为一个函数,这个函数的参数是一个int类型的参数,返回值也是int类型
func getSum() func (int) int {
        var sum int = 0
        return func (num int) int{
                sum = sum + num 
                return sum
        }
}
//闭包:返回的匿名函数+匿名函数以外的变量num
func main(){
        f := getSum()
        fmt.Println(f(1))//1 
        fmt.Println(f(2))//3
        fmt.Println(f(3))//6
        fmt.Println(f(4))//10
}

匿名

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go 运算符 下一篇Go 函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目