zoukankan      html  css  js  c++  java
  • Go语言_函数学习篇

    这里要说一下是Go函数和一些其他语言不一样的地方

    1 函数格式不同

    1
    2
    3
    4
    5
    6
    func GetMsg(i int) (r string) {
        fmt.Println(i)
        r = "hi"
        return r
     
    }

    func说明这个是个函数

    GetMsg是函数名

    (i int) 函数接收一个int参数

    (r string) 函数返回一个string类型返回值

    2 函数可以返回多个返回值

    这点和c,php都不一样,和lua是一样的

    1
    2
    3
    4
    5
    6
    7
    func GetMsg(i int) (r string, err string) {
        fmt.Println(i)
        r = "hi"
        err = "no err"
        return r,err
     
    }

    3 defer的使用

    defer的意思是"在函数退出时调用",特别用于对文件进行读写操作的时候,需要在open之后要调用close操作,将close操作使用defer

    func ReadFile(filePath string)(){
        file.Open(filePath)
        defer file.Close()
         
        if true {
            file.Read()
        } else {
            return false
        }
     
    }

    这样写的意思是在file.Open后不立即调用close,当return false的时候调用file.Close().这样就有效避免了C语言中的内存泄露问题。

    4 比较难理解的:panic,recover和defer

    推荐看这篇博客:

    http://blog.golang.org/2010/08/defer-panic-and-recover.html

    defer的作用上一节说得很清楚了。

    Panic和Recover我们就将他们看成是其他语言中的throw和catch

    下面这个例子:

    package main
     
    import "fmt"
     
    func main() {
        f()
        fmt.Println("Returned normally from f.")
    }
     
    func f() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("Recovered in f", r)
            }
        }()
        fmt.Println("Calling g.")
        g(0)
        fmt.Println("Returned normally from g.")
    }
     
    func g(i int) {
        if i > 3 {
            fmt.Println("Panicking!")
            panic(fmt.Sprintf("%v", i))
        }
        defer fmt.Println("Defer in g", i)
        fmt.Println("Printing in g", i)
        g(i + 1)
    }

    返回了:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Calling g.
    Printing in g 0
    Printing in g 1
    Printing in g 2
    Printing in g 3
    Panicking!
    Defer in g 3
    Defer in g 2
    Defer in g 1
    Defer in g 0
    Recovered in f 4
    Returned normally from f.

    Panic抛出了信息,并且跳出函数。Recover接受到了信息,并且继续处理。

    这个例子理解了基本就掌握了Recover和Panic

    Creative Commons License

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    IntelliLock
    XAF How to show custom forms and controls in XAF (Example)
    [转] How to Show Usual Winform as View in XAF
    Strong name signature not valid for this assembly Microsoft.mshtml.dll
    各廠商ERP系統架構圖連結 (ERP流程圖)(轉)
    [原] XAF How can I change XafDisplayNameAttribute dynamically
    [原] XAF How to implement a custom attribute to customize the Application Model
    [转] XAF 存储多币种代码列表的三种方法
    [原] XAF 如何将数据库中Byte array图片显示出来
    [原] XAF 如何基于业务规则禁用属性
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2532519.html
Copyright © 2011-2022 走看看