Go语言函数(Function)详解

一、什么是函数?

函数(Function)是封装好的一段可以被重复调用的代码块。 它可以 接收输入(参数),返回输出(返回值)。

函数的核心作用

  • 封装:把复杂的逻辑打包成一个名字,方便复用。

  • 抽象:隐藏实现细节,只暴露输入输出。

  • 组织代码:让程序结构更清晰。


二、函数的基本结构

Go语言的函数定义格式是:

func 函数名(参数列表) (返回值列表) {
    // 函数体
}

关键词解析

  • func:声明一个函数。

  • 函数名:函数的名字,首字母大写表示可被其他包访问

  • 参数列表:传给函数的输入,可以是多个。

  • 返回值列表:函数执行完返回的值,也可以是多个。

  • {}:代码块,写具体执行内容。


三、简单例子:定义并调用函数

package main
​
import "fmt"
​
// 定义一个函数
func sayHello() {
    fmt.Println("Hello, world!")
}
​
func main() {
    // 调用函数
    sayHello()
}

说明

  • sayHello没有参数,也没有返回值。

  • main是程序的入口,调用sayHello()


四、带参数的函数

定义带参数的函数

func greet(name string) {
    fmt.Println("Hello,", name)
}

调用

greet("Tom")

解释

  • name string:定义了一个名为name的参数,类型是string

  • 调用时传一个实际的字符串,比如"Tom"。


五、带返回值的函数

定义带返回值的函数

func add(a int, b int) int {
    return a + b
}

调用

sum := add(3, 5)
fmt.Println(sum)  // 输出8

注意

  • int是返回值类型。

  • return用于返回结果。


六、多个返回值

Go语言的函数可以返回多个值

func swap(x, y string) (string, string) {
    return y, x
}

调用

a, b := swap("hello", "world")
fmt.Println(a, b)  // world hello

应用场景

  • 返回结果+错误信息

  • 同时返回多个计算结果


七、命名返回值

可以直接给返回值起名字,省略return后面要写的变量名

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

说明

  • (x, y int)是带名字的返回值。

  • return时可以不写变量,默认返回xy


八、可变参数(变长参数)

有时候参数数量不固定,可以用...类型表示可变参数

func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}

调用

result := sum(1, 2, 3, 4, 5)
fmt.Println(result) // 输出15

注意

  • nums其实是一个[]int切片。


九、匿名函数(函数表达式)

Go支持没有名字的函数,叫匿名函数。 可以直接定义后使用。

func() {
    fmt.Println("Anonymous function")
}()

或者赋值给变量:

f := func(a int, b int) int {
    return a + b
}
fmt.Println(f(3, 4))  // 输出7

十、函数作为参数和返回值

Go的函数可以作为参数传入,也可以作为返回值返回

func operate(a int, b int, op func(int, int) int) int {
    return op(a, b)
}
​
func add(a int, b int) int {
    return a + b
}
​
func main() {
    result := operate(3, 4, add)
    fmt.Println(result)  // 输出7
}

说明

  • operate接收一个op参数,类型是func(int, int) int

  • 传入add函数作为参数。


十一、延迟执行(defer)

defer语句用于延迟执行,在函数结束前自动调用。

func main() {
    defer fmt.Println("world")
    fmt.Println("hello")
}

输出顺序

hello
world

应用场景

  • 释放资源(比如关闭文件、释放锁)

 👉 立即点击链接,开启你的全栈开发之路:Golang全栈开发完整课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值