博客
关于我
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 对json数据读取及保存与读取,对dump,dumps,load,loads的理解
    查看>>
    Python 对mysql数据库的操作
    查看>>
    Python 对象数据库列表
    查看>>
    Python 导入requests报错No module named requests
    查看>>
    python 将函数加到列表中进行调用
    查看>>
    python 将图片与字符串相互转换
    查看>>
    Python 嵌套字典全面指南
    查看>>
    Python 常见的错误类型和继承关系
    查看>>
    python 常量_零基础学Python系列之一:Python的变量与常量
    查看>>
    Python 并发编程
    查看>>
    python 序列化操作
    查看>>
    Python 开发者,这 7 个 VS Code 插件极力推荐
    查看>>
    python手把手视频_硬货 | 手把手带你构建视频分类模型(附Python演练))
    查看>>
    python 录音左右声道_Python分离立体声wav压缩文件的左右声道
    查看>>
    Python 循环异或对文件进行加解密
    查看>>
    Python开发环境搭建(附VMware安装包及虚拟机环境)
    查看>>
    python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
    查看>>
    Python 快速下载依赖
    查看>>
    python实现非参数统计的Cochran检验 (附完整源码)
    查看>>
    Python 手写数字识别-3-sklearn中的几种算法
    查看>>