Go函数

简介: Go函数

为什么需要函数

函数(有些编程语言中叫做方法)几乎是每个编程语言最重要的内容,无论是函数式编程还是面向对象编程。每一段程序都由大量的函数构成,比如内置函数或者自定义函数。可以说,函数就是代码块的基本组成部分,这本章中,我们将着重讲一下Go语言中函数的相关知识。

Go函数

因为Go语言是编译型语言,所以函数在程序中被调用的位置不是很重要。这一点注意和解释型语言(比如Python)相区分,Python的函数在调用之前必须先定义好,否则会报错。

  • 函数本质是一种类型,可以作为其他函数的参数或返回值,也可以直接调用执行。
  • Go语言支持返回多个值,并且都可以用变量接收
  • Go不是一门纯函数式的编程语言,但支持闭包
  • 函数支持可变参数

函数对于调用者而言没有区别,Go语言中有3种类型的函数:

  1. 带有标识符的函数
  2. 匿名函数或者lambda函数
  3. Go语言中的Methods(方法)

函数定义

go语言中的函数定义格式如下:

func function_name(param-list) return_datatype {
  // do something
  function-body
  return foo
}

解释——函数定义的包括:函数声明关键字func、函数名、参数列表、返回类型和函数体和返回值。

这里有些是必须的,比如func关键字和函数名

函数可以无输入参数,也可以没有返回类型(默认会返回 0 )。

无参无返回类型的函数

func main() {
  hello()
}
// a simple function
func hello() {
  fmt.Println("hello() was called")
}

运行go run hello.go后,我们能看到如下结果:

image.png

有参有返回值的函数

定义一个add()函数,传入两个参数,返回两数字之和:

package main
import "fmt"
func main() {
    hello()
    fmt.Printf("3 + 4 = %d", add(3, 4))
}
// a simple function
func hello() {
    fmt.Println("hello() was called")
}
// a function with parameters and with returning value
func add(a, b int) (sum int) {
    sum = a + b
    return
}

运行然后输出结果:

hello() was called
3 + 4 = 7

多返回值的函数

// a function with parameters and multiple return values
func compute(a, b, c float64, name string) (float64, float64, string) {
    result1 := a + b
    result2 := a + b + c
    result3 := result1 + result2
    newName := fmt.Sprintf("%s value = %.2f", name, result3)
    return result1, result2, newName
}

多参数多返回值的函数

// a function with zero or more parameters and a return value
func add(numbers ...int) int {
    result := 0
    for _, number := range numbers {
        result += number
    }
    return result
}

     

相关文章
|
2月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
22 3
|
8月前
|
存储 算法 Go
go语言中的延迟执行函数
【5月更文挑战第13天】`defer`是Go语言中用于延迟执行函数的关键字,尤其适用于资源管理,如文件关闭和锁的释放。它在函数返回前按照LIFO顺序执行,确保资源在任何返回路径下都能正确释放。`defer`可以拦截`panic`并在函数返回前执行,但无法阻止某些致命的`panic`。此外,`defer`可用于修改返回值、输出调试信息和还原变量值。尽管在某些场景下可能影响性能,但Go的优化使得其在多数情况下性能表现良好,特别是在资源清理方面。在Go 1.20及以后的版本,`defer`的性能已显著提升,尤其是在高计算量的场景下。
283 2
|
4月前
|
Go
go函数
go函数
38 10
|
4月前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
34 0
|
4月前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
5月前
|
Prometheus Cloud Native Go
Go 1.22 标准库 slices 新增函数和一些旧函数增加新特性
Go 1.22 标准库 slices 新增函数和一些旧函数增加新特性
|
5月前
|
安全 编译器 Go
Go 1.21: 泛型函数的全面回顾
Go 1.21: 泛型函数的全面回顾
|
5月前
|
Go
深入理解 Go 中的 new() 和 make() 函数
深入理解 Go 中的 new() 和 make() 函数
|
5月前
|
设计模式 Java 数据库连接
|
5月前
|
Go 开发者