Go语言函数学习教程

 更新时间:2016年07月27日 11:59:10   作者:轩脉刃  
这篇文章主要介绍了Go语言函数基本用法,结合实例形式分析了Go语言函数的格式、定义、使用方法与相关注意事项,需要的朋友可以参考下

本文实例讲述了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语言程序设计有所帮助。

相关文章

  • go语言日志实现详解(打印日志、日志写入文件和日志切割)

    go语言日志实现详解(打印日志、日志写入文件和日志切割)

    golang内置了log包,实现简单的日志服务,下面这篇文章主要给大家介绍了关于go语言日志实现(打印日志、日志写入文件和日志切割)的相关资料,需要的朋友可以参考下
    2022-10-10
  • Go Println和Printf的区别详解

    Go Println和Printf的区别详解

    这篇文章主要介绍了Go Println和Printf的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 详解Go语言中用 os/exec 执行命令的五种方法

    详解Go语言中用 os/exec 执行命令的五种方法

    这篇文章主要介绍了Go语言中用 os/exec 执行命令的五种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Go语言的io输入输出流方式

    Go语言的io输入输出流方式

    Go语言中,输入输出流的处理通过io库中的Reader和Writer接口来实现,Reader接口定义了Read方法,用于从流中读取数据到程序中,Writer接口定义了Write方法,用于将数据写入到底层的数据流中,这些接口被许多标准库的类型所实现
    2024-10-10
  • Go语言map元素的删除和清空

    Go语言map元素的删除和清空

    本文主要介绍了Go语言map元素的删除和清空,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • golang 中的 nil的场景分析

    golang 中的 nil的场景分析

    这篇文章主要介绍了golang 中的 nil,本文通过多种场景分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • go sync.Map基本原理深入解析

    go sync.Map基本原理深入解析

    这篇文章主要为大家介绍了go sync.Map基本原理深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Golang实现自己的Redis数据库内存实例探究

    Golang实现自己的Redis数据库内存实例探究

    这篇文章主要为大家介绍了Golang实现自己的Redis数据库内存实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • GoFrame ORM原生方法操作示例

    GoFrame ORM原生方法操作示例

    这篇文章主要为大家介绍了GoFrame ORM原生方法操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言判断指定文件是否存在的方法

    Go语言判断指定文件是否存在的方法

    这篇文章主要介绍了Go语言判断指定文件是否存在的方法,实例分析了Go语言针对文件操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论