博客
关于我
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/

    你可能感兴趣的文章
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>
    Python听写汇总结果
    查看>>
    python吊打Excel?屁!那是你不会用!
    查看>>
    Python合并两张图片 | 先叠透明度再合并 (附Demo)
    查看>>
    python各进制的表述与转换
    查看>>
    python各种库安装
    查看>>