Go函数的使用
1、一般用法
以func关键字申明,传入参数名称写在前,参数类型写在后
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func main() {
fmt.Print(add(1, 2))
}
返回可以申明返回值名称,也可以不申明,申明返回值时返回类型写在后,申明返回值,相当于定义了一个变量,来接返回值(一般不建议使用,毕竟函数体一大就不是很清晰能看到那里赋值了)
package main
import "fmt"
func add(a, b int) (c int) {
c = a + b
return
}
func main() {
fmt.Print(add(1, 2))
}
返回可以返回多个值
package main
import "fmt"
func div(a, b int) (c int, d int) {
c = a / b
d = a % b
return
}
func main() {
fmt.Print(div(13, 2))
}
不接收某个返回值,用下划线_代替就行
package main
import "fmt"
func div(a, b int) (c int, d int) {
c = a / b
d = a % b
return
}
func main() {
a, b := div(13, 2)
fmt.Println(a, b)
c, _ := div(13, 2) //使用_接收表示不关系该值
fmt.Println(c)
}
2、函数作为参数
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func sub(a, b int) int {
return a - b
}
func call(f func(int, int) int, a, b int) int {
return f(a, b) //传入加法|减法|乘法
}
func main() {
fmt.Println(call(add, 3, 5))
fmt.Println(call(sub, 3, 5))
fmt.Println(call(func(i int, i2 int) int {
return i * i2 //乘法
}, 3, 5))
}
3、可变参数列表
package main
import "fmt"
func add(a ...int) {
s := 0
for i := range a {
s += i
}
fmt.Println(s)
}
func main() {
add(1, 2, 3)
add(1, 2, 3, 4)
}
4、参数传递是值传递还是引用传递?
答案是:只有值传递一种方式
值传递:拷贝一份值到函数体内运算,运算后不影响外面的值,比如外面a=3,函数体中执行a++,则函数执行完后,a的值依旧是3
引用传递:引用了同一个地址,函数运算后影响外面的值,比如外面a=3,函数体中执行a++,则函数执行完后,a的值变成了4
package main
func f(a int) int {
a = a + 5
return a
}
func main() {
var c int = 10
print(c) //查看原始的c的值 10
d := f(c)
print(d) //查看计算后的返回结果 15
print(c) //查看计算后c的值 10
//所以函数传递是值传递
}
如果想改变C的值,可以通过传递指针来改变
package main
func f(a *int) int {
*a = *a + 5
return *a
}
func main() {
var c int = 10
print(c) //查看原始的c的值 10
d := f(&c)
print(d) //查看计算后的返回结果 15
print(c) //查看计算后c的值 15
//所以通过传递指针可以改变原始值,达到引用传递的效果
}