欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go语言函数学习教程

程序员文章站 2022-04-10 12:15:42
本文实例讲述了go语言函数基本用法。分享给大家供大家参考,具体如下: 这里要说一下是go函数和一些其他语言不一样的地方 1 函数格式不同 复制代码 代码如下:func...

本文实例讲述了go语言函数基本用法。分享给大家供大家参考,具体如下:

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

1 函数格式不同

复制代码 代码如下:
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是一样的

复制代码 代码如下:
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

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)
}

返回了:

复制代码 代码如下:
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

希望本文所述对大家go语言程序设计有所帮助。