golang笔记 - 函数

GO语言函数

func max(num1,num2 int) int{
   var result int
   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

// 函数返回多个值 
func swap(x, y string) (string, string) {
   return y, x
}

//函数作为值
getSquareRoot := func(x float32) float32{
    return math.Sqrt(x)
}
fmt.Println(getSquareRoot(9))

// 命令返回值
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}
  1. 任意类型的不定参数
func myPrintf(args ...interface{}){
} 
  1. 匿名函数后后面跟上小括号,里面加参数,就可以直接运行
func (name string){
    fmt.Println(name)
}("xiaoming")


  1. Go函数不支持嵌套、重载和默认参数
    仅支持:

  1. 无需声明原型
  2. 不定长度变参
  3. 多返回值
  4. 命名返回值参数
  5. 匿名函数
  6. 闭包
  7. 函数可以作为一种类型使用
  8. func A(a, b, c int)(int,int,string){}
  9. 命名返回值

    func A()(a,b,c int){ //此时a,b,c已经声明
    a,b,c = 1,2,3
    return
    }
  10. 不定长参数

    func A(a ...int){
    fmt.PrintlnI(a) // a是一个slice //值拷贝
    }

    在不定长参数里面,如果要放其他参数,需要放在不定长参数前面,func A(b string,a …int){}
    如果直接把一个slice扔进来,那slice本身是引用传参
    int string 等传参是值传参,如果要进行引用传参,可以传指针进来,通过指针间接修改原值
    func main(){
        a := 1
        A(&a)
        fmt.Println(a)
    }

   func A(a *int){
        *a = 2
        fmt.Println(*a)
    }


  1. 闭包

func main() {
    f := closure(10)
    fmt.Println(f(1))
    fmt.Println(f(2))
}

func closure(x int) func(int) int {
    return func(y int) int {
        return x + y
    }
}
  • defer

    执行方式类似其他语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行
    即使函数发生严重错误也会执行
    支持匿名函数的调用
    常用于资源清理、文件关闭、解锁以及记录时间等操作
    通过与匿名函数配合可在return之后修改函数计算结果
    如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则则是引用某个变量的地址
    Go没有异常机制,但有panic/recover模式来处理错误
    Panic可以在任何地方引发,但recover只有在defer调用的函数中有效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值