• Go语言学习笔记八--Go语言中函数的所有用法 与 defer关键字


    Go语言中函数的所有用法

    代码中包括不带参数、带参数、多参数、有返回值、无返回值、多返回值、匿名函数的简单示例

      1 package main
      2 
      3 import "fmt"
      4 
      5 //函数名大写可以在包外进行访问 函数名小写只能在包内进行访问 变量名亦是如此
      6 
      7 
      8 //无参数无返回值的函数
      9 func printHello()  {
     10     println("*******************")
     11     println("**               **")
     12     println("** Hello World!  **")
     13     println("**               **")
     14     println("*******************")
     15 }
     16 
     17 //一个返回值实现两个数的相加
     18 func add(a int, b int) int {
     19     return a + b
     20 }
     21 
     22 //如果参数类型一样 则前面的可以省略
     23 func add2(a,b,c,d int) int {
     24     return a+b+c+d
     25 }
     26 
     27 //多返回值
     28 func add3(a,b int) (int,int) {
     29     sum := a+b
     30     sub := a-b
     31     return sum, sub
     32 }
     33 //多返回值 返回值名字已经固定,所以函数体直接用,自动返回,也不用写在return里面
     34 func add4(a, b int) (sum int, sub int) {
     35     sum = a+b
     36     sub = a-b
     37     return
     38 }
     39 //多参数
     40 func add5(b ...int) int{
     41     sum := 0
     42     for i := 0; i < len(b); i++  {
     43         sum += b[i]
     44     }
     45     return sum
     46 }
     47 
     48 //defer的使用
     49 func printHello2()  {
     50     defer println("我是defer的语句,我在函数执行快返回的时候才会调用我")
     51     defer println("我是defer的语句,我主要用于文件使用结束然后关闭文件的场景")
     52     defer println("我是defer1")
     53     defer println("我是defer2 这个是基于栈来实现的,所以在最后面的反而会先打印出来")
     54     println("*******************")
     55     println("**               **")
     56     println("** Hello World!  **")
     57     println("**               **")
     58     println("*******************")
     59 }
     60 
     61 func defer1(){
     62     i := 0
     63     defer fmt.Printf("defer后i的值为 %d
    ",i) //0
     64     i = 100
     65     println("i的值为:",i)
     66 }
     67 
     68 func defer2(){
     69     i := 0
     70     //下面这里是匿名函数
     71     defer func(a int,b int) {
     72         fmt.Printf("defer后i的值为 %d
    ",i) //100
     73         println(a,b)
     74     }(50,100)
     75     i = 100
     76     println("i的值为:",i)
     77 }
     78 
     79 //函数作为参数的例子 fun的参数类型为 "func(int, int) int"
     80 func calc(a , b int, fun func(int, int) int) int {
     81     return fun(a,b)
     82 }
     83 func addCalc(a, b int) int {
     84     return a+b
     85 }
     86 func subCalc(a, b int) int {
     87     return a-b
     88 }
     89 
     90 
     91 
     92 func main() {
     93     printHello()
     94     var c = add(3,2)
     95     println("add1 后 c的值为:",c)
     96 
     97     c = add2(1,2,3,4)
     98     println("add2 后 c的值为:",c)
     99 
    100     sum,sub := add3(12,23)
    101     println("add3 sum的值为:",sum," str的值为:",sub)
    102 
    103     sum,sub = add4(23,32)
    104     println("add4-1 sum的值为:",sum," str的值为:",sub)
    105 
    106     //下划线表示忽略这个返回值 不需要它
    107     sum,_ = add4(55,77)
    108     println("add4-2 sum的值为:",sum)
    109 
    110     println("这个是0参数的函数相加结果:",add5())
    111     println("这个是3参数的函数相加结果:",add5(1,2,3))
    112     println("这个是9参数的函数相加结果:",add5(1,2,3,4,5,6,7,8,9))
    113 
    114     //这个是查看defer的用法
    115     printHello2()
    116 
    117     // anonymity 匿名函数 函数也是一种类型 所以可以通过一个变量名进行存储函数变量
    118     anonymityFun := printHello
    119     fmt.Printf("fun函数的类型是%T
    ",anonymityFun)
    120     anonymityFun()
    121 
    122     //defer 与匿名函数
    123     defer2()
    124 
    125     //函数作为参数的例子
    126     println("函数作为参数的例子")
    127     sum = calc(2,5, addCalc)
    128     sub = calc(8,4, subCalc)
    129     println("sum的值为", sum, "sub的值为", sub)
    130 
    131 }
  • 相关阅读:
    保证测试通过的ip正则,antdIP/IP段的校验方法,antd的textArea中可以输入多个以换行分隔的ip/IP段,并自动检测出错行的原因
    TP5接口出错只能返回500
    UDP服务只能本机访问问题
    有出现了找半天的小BUG
    PHP本地安装redis扩展
    MYSQL数据库和es数据库同步
    QQ互联应用申请失败
    axios跨域问题解决
    elastic和kibana安装心得
    自增运算符理解
  • 原文地址:https://www.cnblogs.com/xwxz/p/13299418.html
Copyright © 2020-2023  润新知