轻松入门Go语言函数·returnType·值传递是传递参数的副本引用传递是传递参数的地址
作者:巡检机器人o1 |
发布时间:2025-06-13 |
一、轻松入门Go语言函数
在Go语言里,写函数就像搭积木一样简单,主要分几个步骤来玩转它。
二、定义函数
定义函数,就是给函数起个名字,然后告诉它需要什么材料(参数)和它能做什么(返回什么)。基本格式是这样的:
```
func functionName(parameter1 type1, parameter2 type2) returnType {
// 函数体
}
```
- 函数名:起个有意义的名字,首字母大写表示公开,小写则表示私有。
- 参数列表:告诉函数需要什么材料,每种材料得写上类型。
- 返回类型:告诉函数完成后要给什么结果。
- 函数体:就是函数要执行的代码。
比如,定义一个简单的加法函数:
```
func add(a, b int) int {
return a + b
}
```
三、调用函数
调用函数就像点外卖一样简单,直接写上函数名,把需要的材料(参数)扔给它。
```
result := add(3, 4)
fmt.Println(result) // 输出:7
```
- 函数名:直接写函数的名字。
- 传入参数:按照函数定义,把对应的材料传给它。
- 接收返回值:如果函数有结果,可以把它存起来。
四、函数返回值
有时候函数会给你几个结果,这叫多重返回值。这在处理错误的时候特别有用。
```
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("division by zero")
}
return a / b, nil
}
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result) // 输出:5
}
```
- 多个返回值:用逗号分隔,可以返回多个值。
- 错误处理:通过返回错误类型,告诉调用者发生了什么问题。
五、匿名函数和闭包
匿名函数就是没有名字的函数,通常用于临时的小功能。闭包就像是拿着一份旧地图去新地方探险,它记得那些已经看过的风景。
```
sum := func(a, b int) int {
return a + b
}
fmt.Println(sum(3, 4)) // 输出:7
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
sumFunc := adder()
fmt.Println(sumFunc(1)) // 输出:1
fmt.Println(sumFunc(2)) // 输出:3
fmt.Println(sumFunc(3)) // 输出:6
```
- 匿名函数:直接写在一个变量赋值语句或函数调用中。
- 闭包:捕获并使用其定义环境中的变量。
六、递归函数
递归函数就是自己调用自己,这在处理树状结构或分治问题时很有用。
```
func factorial(n int) int {
if n == 0 {
return 1
}
return n factorial(n-1)
}
fmt.Println(factorial(5)) // 输出:120
```
递归函数要记得有终止条件,否则会无限循环。
七、方法和接收者
方法和函数有点像,但方法必须有一个接收者,可以是类型的实例或指针。
```
type Rectangle struct {
width, height int
}
func (r Rectangle) area() int {
return r.width r.height
}
rect := Rectangle{10, 5}
fmt.Println(rect.area()) // 输出:50
```
- 接收者:在函数名前面加上类型和实例。
相关问答FAQs
问题 |
答案 |
什么是Go语言函数? |
Go语言中的函数是一段可执行的代码块,用于执行特定任务或操作,可以接收参数并返回值。 |
如何定义和调用一个函数? |
使用`func`关键字定义函数,调用时直接使用函数名并传入参数。 |
如何传递参数给函数? |
可以值传递或引用传递。值传递是传递参数的副本,引用传递是传递参数的地址。 |
这些就是关于Go语言函数的基础知识,希望对大家有所帮助!