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语言中strings和strconv包示例代码详解

    Go语言中strings和strconv包示例代码详解

    这篇文章主要介绍了Go语言中strings和strconv包示例代码详解 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • GoFrame框架ORM原生方法对象操作开箱体验

    GoFrame框架ORM原生方法对象操作开箱体验

    这篇文章主要为大家介绍了GoFrame框架ORM原生方法对象操作的开箱体验,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang time常用方法详解

    golang time常用方法详解

    这篇文章主要介绍了golang time常用方法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • go循环依赖的最佳解决方案

    go循环依赖的最佳解决方案

      import cycle not allowed(循环依赖不被允许)相信作为每一个golang语言使用研发,都遇到过这个令人头痛的报错,循环依赖是指两个或多个模块之间互相依赖,形成了一个闭环的情况,本文会结合部分案例对解决方案进行讲解,需要的朋友可以参考下
    2023-10-10
  • GO语言实现批量压缩图片和水印

    GO语言实现批量压缩图片和水印

    这篇文章主要介绍了GO语言实现批量压缩图片和水印,主要用到了github.com/nfnt/resize这个第三方库,仅仅支持JPG图片格式,有相同需求的小伙伴参考下吧。
    2015-03-03
  • 深入理解Golang之http server的实现

    深入理解Golang之http server的实现

    这篇文章主要介绍了深入理解Golang之http server的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • GoLand 2020.3 正式发布有不少新功能(支持泛型)

    GoLand 2020.3 正式发布有不少新功能(支持泛型)

    这是 2020 年第 3 个版本,也是最后一个版本,你还将发现许多新的代码编辑功能,具体内容详情跟随小编看看有哪些新特性
    2020-12-12
  • 举例讲解Go语言中函数的闭包使用

    举例讲解Go语言中函数的闭包使用

    这篇文章主要介绍了Go语言中函数的闭包使用示例,函数闭包closure是编程语言中十分重要的特性,需要的朋友可以参考下
    2016-03-03
  • Golang中文件目录操作的实现步骤详解

    Golang中文件目录操作的实现步骤详解

    在Golang中,文件目录是指计算机文件系统中的文件夹或目录。目录是用于组织和存储文件的一种方式,可以包含文件和其他子目录,本文主要介绍了Golang中文件目录操作的实现方法,需要的朋友可以参考下
    2023-05-05
  • Go easyjson使用及反射原理

    Go easyjson使用及反射原理

    这篇文章主要介绍了Go easyjson使用技巧,详细介绍了go自带JSON库使用的反射原理,性能相对较差,可以使用easyjson代替,需要的朋友可以参考下
    2022-04-04

最新评论