zoukankan      html  css  js  c++  java
  • golang函数

    一、函数语法

    func 函数名(形参列表) (返回值列表){

              ......

          return 返回值

    }

    例如:

    package main
    import "fmt"
    
    func test_func(n1 int,n2 int) (int){
        var ret int 
        ret = n1 + n2
        return ret
    }
    
    
    func main(){
        var f int
        f = test_func(1,3)
        fmt.Printf("Type: %T Value: %v
    ",f,f)
    
    }
    
    ##结果##
    Type: int Value: 4
    

      

    二、递归函数

    例子

    package main
    import "fmt"
    
    func digui_func(n1 int){
        if n1 > 2 {
            n1--
            fmt.Println(n1)
            digui_func(n1)
        }
    }
    
    
    func main(){
        digui_func(5)
    }
    
    ##结果##
    4
    3
    2
    

      

     三、init函数(初始化函数)

    没一个源文件都可以包含一个init函数,init函数校准main函数执行前执行。

    例子:

    package main
    import "fmt"
    
    func init(){
        fmt.Println("init.....")
    }
    
    func main(){
        fmt.Println("main.....")
    }
    
    ##结果##
    init.....
    main.....
    

      

    四、匿名函数

    例子:

    package main
    import "fmt"
    
    func main(){
        res := func(n1,n2 int) int{
            return n1 + n2
        }
        
        var s1 int
        var s2 int
        s1 = res(1,2)
        fmt.Println(s1)
        s2 = res(3,4)
        fmt.Println(s2)
    }
    
    ##结果##
    3
    7

      

    全局匿名函数

    例子:

    package main
    
    var (
        res := func(n1,n2 int) int{
            return n1 + n2
        }
    
    )
    

      

    五、闭包函数

    例子:

    package main 
    import "fmt"
    
    func bibao() func (int) int {
        var n int = 10
        return func (x int) int {
            n = n + x
            return n
        }
    }
    
    func main(){
        f := bibao()
        f1 := bibao()
        fmt.Println(f(1))
        fmt.Println(f1(2))
    
    }
    
    ##结果##
    11
    12
    

      

    六、函数的defer

    为了在函数执行完成后,及时释放资源,go的设计者提供了defer(延时机制)

    适合用再关闭文件、关闭数据库连接等

    例子:

    package main
    import "fmt"
    
    
    func test() int {
        defer fmt.Println("s1")
        defer fmt.Println("s2")
        var ss int = 10
        fmt.Println("s3")
        return ss
    }
    
    func main(){
        ret := test()
        fmt.Println(ret)
    }
    
    ##结果##
    s3
    s2
    s1
    10
    

      

  • 相关阅读:
    docker: 定时检查docker container的运行状态并发邮件报警
    docker: 解决centos7下cgroup.procs: no such device的错误
    Redis: 改变HomeBrew安装的数据库文件目录
    MySQL: 改变Homebrew安装MySQL/MariaDB的数据库文件目录
    Node: 在Mac中离线安装Sqlite3
    通过DaoCloud发布Ghost
    Node: Updating npm's bundled node gyp
    Android Broadcast管理
    Android PackageManager packages.xml文件格式
    Android PackageManager概览
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/10510762.html
Copyright © 2011-2022 走看看