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

    你可能感兴趣的文章
    PentestGPT:一款由ChatGPT驱动的强大渗透测试工具
    查看>>
    PEP 8016 获胜,成为新的 Python 社区治理方案
    查看>>
    PEP8规范
    查看>>
    PEPM Cookie 远程代码执行漏洞复现(XVE-2024-16919)
    查看>>
    Percona Server 5.6 安装TokuDB
    查看>>
    SpringBoot(十四)整合MyBatis
    查看>>
    percona-xtrabackup 备份
    查看>>
    SpringBoot集成OpenOffice实现doc文档转html
    查看>>
    ROS中机器人的强化学习路径规划器
    查看>>
    perl---2012学习笔记
    查看>>
    Perl6 必应抓取(1):测试版代码
    查看>>
    Perl的基本語法
    查看>>
    perl输出中文有乱码
    查看>>
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 大数据ssh权限问题 hadoop起不来 hadoopssh错
    查看>>
    PermissionError:Python 中的 [Errno 13]
    查看>>
    PermissionError:[Errno 13] 权限被拒绝:‘/manage.py‘
    查看>>
    Permutation
    查看>>
    perspective意思_2020年12月英语四级词汇讲解丨考点归纳:perspective
    查看>>
    PE文件,节头有感IMAGE_SECTION_HEADER
    查看>>
    PE查找文件偏移地址
    查看>>