GO的函数使用学习笔记与总结

在B站跟着老韩学习了GO语言,做了一下个人总结,并对代码做了详细的注释,希望能对该部分有疑问的朋友带来一丢丢的帮助,同时欢迎大家指出我说的不对的地方。

今日学习函数特性:

1.在GO中,函数也是一种数据类型,可以赋值给一个变量,该变量就是一个函数类型变量。通过该变量可以调用函数

2.函数可以作为形参,并且调用

3.GO支持自定义数据类型:type 自定义数据类型名 数据类型

4.支持对函数的返回值命名

代码区:

package main

import (

    "fmt"

)

func getsum(n1 int,n2 int)int{

    return n1+n2

}//取值函数,定义n1 和 n2 为int值,返回的值也是int

//函数规则为 n1+n2

func myFun(funvar myFunType,num1 int,num2 int)int{

    //定义funvar变量 为函数变量myFunType 即 func(int,int)int

    //即,此时的变量funvar已经成为了一个函数变量,可以适用getsum的规则

    return funvar(num1,num2)

    //使funvar函数变量可以调用函数

}

type myFunType func(int,int)int

//定义变量myFuntype为函数类型func(int,int)int

func getSumAndSub(n1 int,n2 int)(sum int,sub int){

    sum = n1+n2

    sub = n1-n2

    return

    //GO中函数可以给返回值命名

}

func main(){

    a := getsum //赋予a为数据类型getsum

    fmt.Printf("a的类型%T,getsum是%T\n",a,getsum)

    //输出a和getsum的数据类型都为func(int,int)int

    //此时的getsum为a的数据类型,因为在go中,函数也是一种数据类型

    //通过将函数赋值给一个变量,使得该变量成为一个函数变量

    //通过该变量可以调用函数类型

    res := a(10,40) //相当于res := getSum(10,40)

    //这里的a已经是函数变量了,所以res直接调用getsum函数,进行相加计算

    fmt.Println("res=",res)

    //输出的为调用gersum函数的值,10+40=50

    res2 := myFun(getsum,50,60)

    //re2调用函数myfunc,加入getsum函数,是将它传给myfunc中的funvar函数变量

    //使得funvar这个函数变量可以调用getsum函数

    //计算用getsum函数,50+60

    fmt.Println("res2=",res2)

    type myInt int

    //go支持自定义数据类型

    //定义myInt为int

    var num1 myInt

    num1 = 40

    //给int取一个别名,在go中,myint和int虽然都是int类型

    //但是go认为,myint和int是两个数据类型

    var num2 int

    //num2 = myInt X

    num2 = int(num1)//将num2设为int类型

    //不能直接写num2 = num1,虽然他们都是int类型

    //但因为go认为,myint和int在语法上不是同一类型

    //所以不能将Myint这个类型直接交给num2

    fmt.Println("num1=",num1,"num2=",num2)

    res3 := myFun(getsum,500,600)

    fmt.Println("res3=",res3)

    c,b := getSumAndSub(1,2)

    //调用函数getsumandsub,c对应函数中的sum,b对应sub

    //1对应函数中的n1,2对应函数中的n2

    fmt.Printf("c=%v b=%v\n",c,b)

    //输出结果c=3 b=-1

}

与老韩不同的是,我省略了一行函数代码,func2,因为这行代码并没有意义,无论写与不写,对整体代码块没有任何的影响,因为定义的myFunType,在老韩的myFun2里面就是相当于给funvar定义为函数变量func(int,int)int,其实本质跟myFun一样,所以没必要再加这一个myFun2,直接在myFun里面把func(int,int)int换成myFunType,得到的效果一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值