博客
关于我
Go 函数详解
阅读量:739 次
发布时间:2019-03-22

本文共 2040 字,大约阅读时间需要 6 分钟。

Go语言函数入门

一、函数基础

函数在Go语言中是第一类类型,既可以作为其他函数的参数或返回值,也可以直接被调用。以下是函数的基本组成部分:

  • 函数定义:由func声明 keyword、函数名、参数列表、返回列表和函数体组成。
  • 函数名:函数名的首字母大小写决定其包可见性。
  • 参数和返回值:需用()包裹,返回值可省略。
  • 函数体:用{}包裹,且{必须位于同行行尾。
  • 例如:

    func A() { // 无输入参数,无返回值,默认返回0    // 函数体}func B(a, b int) int { // 多个相同类型参数可用简写模式    return a + b}func C(a, b int) (sum int) { // 有名返回值    sum = a + b    return}

    二、基本使用

    Go语言的函数特点:

  • 不支持默认值参数和函数重载。
  • 不支持函数嵌套定义,但支持嵌套匿名函数。
  • 支持多值返回,错误类型作为最后一个返回值。
  • 函数实参到形参的传递是值拷贝。
  • 对指针参数的处理需要谨慎。
  • 示例:

    // 1. 可有无输入参数和返回值func D(a, b int) (sum int) {    sum := a + b    return}// 2. 多个相同类型参数可用简写模式func E(a, b, c int) (max int) {    return max(a, b, c)}// 3. 支持嵌套匿名函数func F(a, b int) (int, int) {    return b, a}

    三、不定参数

    不定参数在Go语言中用于处理可变长度的参数列表,需满足以下条件:

  • 不定参数类型必须一致。
  • 不定参数必须是函数的最后一个参数。
  • 不定参数在函数体内相当于切片。
  • 示例:

    // 1. 不定参数类型相同func sum(arr ...int) (sum int) {    for _, v := range arr {        sum += v    }    return}// 2. 不定参数可以是切片func suma(arr ...int) int {    for v := range arr {        sum += v    }    return}

    四、函数类型

    函数类型(Function Signature)是去除函数名和参数名后的函数定义行。可以用type定义函数类型变量:

    示例:

    func add(a, b int) int { return a + b }func sub(x int, y int) int { return x - y }type Op func(int, int) intfunc do(f Op, a, b int) int {    return f(a, b)}

    五、匿名函数

    匿名函数可直接赋值给变量或作为返回值使用:

  • 直接赋值给变量:
  • var sum = func(a, b int) int { return a + b }
    1. 作为返回值:
    2. func getAdd() func(int, int) int {    return func(a, b int) int { return a + b }}
      1. 嵌套匿名函数:
      2. func main() {    defer func() { // 使用 defer 注册延迟函数        if err := recover(); err != nil {            fmt.Println(err)        }    }()    // ...}

        六、错误处理

        Go语言提供两种错误处理机制:

      3. panic:用于主动抛出错误,终止程序。
      4. recover:用于捕获panic,恢复执行。
      5. 示例:

        func main() {    defer func() {        if err := recover(); err != nil {            fmt.Println(err)        }    }()    // ...    panic("错误信息")}

        错误接口error可用于函数返回值:

        type error interface {    Error() string}func openFile(filename string) (file *os.File, error) {    file, err := os.Open(filename)    if err != nil {        return nil, err    }    return file, nil}

        七、底层实现

        Go语言的函数机制基于以下原理:

      6. 函数调用基于栈。
      7. 不定参数和切片基于堆。
      8. 错误处理基于panic和recover机制。
      9. 如需进一步了解底层实现,可参考Go语言的官方文档。

    转载地址:http://onuwk.baihongyu.com/

    你可能感兴趣的文章
    powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
    查看>>
    QGIS怎样设置简体中文以及新建可编辑的多边形的图层
    查看>>
    PowerBuilder 使用自定义事件触发键盘Enter事件
    查看>>
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>
    QGIS在Windows上下载安装与建立空间数据库连接
    查看>>
    PowerDesigner165安装婆姐汉花教程
    查看>>
    PowerDesigner使用教程:设置注释、默认值属性
    查看>>
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>
    PowerDesigner使用教程:给字段添加唯一约束
    查看>>
    QGIS中怎样设置图层样式并导出地图样式
    查看>>
    PowerDesigner使用笔记
    查看>>
    QGIS中怎样实现数据坐标系转换
    查看>>
    PowerDesigner学习--基本步骤
    查看>>
    PowerDesigner导出Report通用报表
    查看>>
    PowerDesigner教程系列(二)概念数据模型
    查看>>