go函数常用模式

package main

import "fmt"
func cal(num1 int,num2 int) (int){

    return num1+num2
}

func cal2(num1 int,num2 int) int{ //一个参数可以省略返回列表的括号

    return num1+num2
}

func cal3(num1 int,num2 int) {//没有返回类型可以省略返回类型和括号

    fmt.Printf("%v\n", num1+num2)
}

func cal4(num1 int,num2 int) (){//没有返回类型可以省略返回类型和括号

    fmt.Printf("%v\n", num1+num2)
}

func Cal5(num1 int,num2 int) (){//驼峰命名,如果首字母大写相当于public.小写相当于 protected 只能包内使用

    fmt.Printf("%v\n", num1+num2)
}

func Cal6(num1 int,num2 int) (int,int){//可以返回多个结果
    return num1+num2,num1-num2
}

func Cal7(num1 int,num2 int) (sum int,sub int){//对函数返回类型进行命名
     sum = num1 + num2
     sub = num1 - num2
    return
}



func ExchangeByValue(num1 int,num2 int) (){//函数不支持重载,即函数名相同
    var temp int =num1
    num1=num2
    num2=temp
}



func ExchangeByRef(num1 *int,num2 *int) (){
    var temp int =0
    temp =*num1
    *num1=*num2
    *num2=temp
}

func dynamicFunc(args...int){
    for i:=0;i<len(args);i++{
        fmt.Printf("%v\t",args[i])
    }
}

func add( a int,b int) (int) {
    return a+b
}

func sub( a int,b int) (int) {
    return a+b
}
func calByFunc(a int,b int ,ff func(int,int) (int)) (int){
    return ff(a,b)
}
//定义函数类型
type funType func(int,int) (int)
//应用函数类型
func calByFunc2(a int,b int ,ff funType) (int){
    return ff(a,b)
}

func main(){

    fmt.Printf("%v+%v=%v\n",10,30,cal(10,30))

    var a int =10

    var b int =20

    fmt.Printf("%v+%v=%v\n",a,b,cal(a,b))



    sum:=cal(a,b)

    fmt.Printf("%v\n",sum)



    sum1:=cal2(a,b)

    fmt.Printf("%v\n",sum1)



    cal3(a,b)



    cal4(a,b)



    sum6,sub6:=Cal6(50,30)

    fmt.Printf("%v\t%v\n",sum6,sub6)




    sum7,_:=Cal6(50,30) //只关心前面一个返回值,后面的可以用_省略

    fmt.Printf("只关心第一个%v\n",sum7)




    _,sub7:=Cal6(50,30) //只关心后面一个返回值,前面的可以用_省略

    fmt.Printf("只关心前面的:%v\n",sub7)




    sum8,sub8 := Cal7(60,20)

    fmt.Printf("sum8   %v\t ,sub8  %v\n",sum8,sub8)



    var e1 int =10

    var e2 int =20

    fmt.Printf("原始值  e1 值 :%v \t e2 值: %v\n",e1,e2)

    ExchangeByValue(e1,e2)

    fmt.Printf("ExchangeByValue e1 值 :%v \t e2 值: %v\n",e1,e2)

    ExchangeByRef(&e1,&e2)

    fmt.Printf("ExchangeByRef e1 值 :%v \t e2 值: %v\n",e1,e2)

    //函数式一种数据类型,可以赋予一个变量

    var ff func(*int,*int) () = ExchangeByRef

    ff(&e1,&e2)

    fmt.Printf("ff e1 值 :%v \t e2 值: %v\n",e1,e2)



    f := ExchangeByRef

    fmt.Printf("f的类型 :%T \t ExchangeByRef的类型: %T\n",f,ExchangeByRef)

    f(&e1,&e2)

    fmt.Printf("ExchangeByRef e1 值 :%v \t e2 值: %v\n",e1,e2)



    fmt.Println("\n------0-------")

    dynamicFunc()

    fmt.Println("\n-----1--------")

    dynamicFunc(45)

    fmt.Println("\n-------4------")

    dynamicFunc(34,2,5,3)



   

    var addr int=calByFunc(30,10,add)

    var subr int=calByFunc(30,10,sub)

    fmt.Printf("\n 函数调用 函数变量 addr :%v \t subr : %v \n  ",addr,subr)




    addr =calByFunc2(30,10,add)

    subr =calByFunc2(30,10,sub)

    fmt.Printf("\n 函数调用 函数别名 函数变量 addr :%v \t subr : %v \n  ",addr,subr)



    //自定义数据类型

    type myInt int

    var num4 myInt = 70

    var num5 int = 10

    //num5=num4 //报错,被认为是不同的类型,如果需要转换需要墙砖类型

    num5= int(num4)         //强转类型

    fmt.Printf("myInt num4 类型 :%T \t int num5 类型: %T  num5的值 :%v \n",num4,num5,num5)  //myInt num4 值 :main.myInt      int num5 值: int

    num5=30

    num4=myInt(num5)        //强转类型

    fmt.Printf("myInt num4 类型 :%T \t int num5 类型: %T  num4的值 :%v \n",num4,num5,num4)  //myInt num4 值 :main.myInt      int num5 值: int

   

}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值