golang笔记

来源:互联网 发布:plc编程软件 编辑:程序博客网 时间:2024/05/21 12:32

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调用的函数中有效

  • 原创粉丝点击