GO语言学习入门笔记系列详解(四):Go语言的函数和指针
Go语言的函数
函数的定义
-
函数名在前 返回值在后(括号里的参数也是一样)
-
函数可以有多个返回值
func div(a,b int)(int,int){ return a / b,a % b }
-
可以给函数的返回值起名(仅仅用于非常简单的函数)
func div(a,b int)(q,r int){ return a / b,a % b }
函数式编程
- 函数作为参数传入
func apply(op func(int,int) int, a, b int) int {
//获得传入函数的名字
p := reflect.ValueOf(op).Pointer()
opName := runtime.FuncForPC(p).Name()
//打印
fmt.Printf("Caalling function %s with args"+"(%d,%d)",opName,a,b)
return op(a,b)
}
- 匿名函数
func main() {
fmt.Println(apply(func(a int, b int) int {
return int (math.Pow(float64(a),float64(b)))
},3,4))
}
- go语言没有参数的重载,有的知识可变参数的列表
func sum(numbers ...int) int {
s := 0
for i := range numbers {
s += numbers[i]
}
return s
}
Go语言的指针
go语言的指针不能运算
参数传递
- 值传递
//值传递是通过复制一份参数过去进行修改,不改变原参数的数据
void pass_by_val(int a){
a ++;
}
- 引用传递
//引用传递参数指向原来的数据,修改后原来的数值也会改变
void pass_by_val(int& a){
a ++;
}
go语言只有值传递一种,不用考虑是值传递还是参数传递。
有以下几种情况:
- 变量传给函数(参数也是变量)
- 变量传给函数(参数是指针)地址被拷贝了一遍
-
Object传给函数,参数也是Object
go语言自定义的时候就要考虑到当作指针来用还是当作值来用。
- 举例子:交换两个变量的值(不是最佳交换方法)
func swap(a,b *int) {
*b,*a = *a,*b
}
- 最佳的是
func swap(a,b int)(int int){
return b,a;
}
a,b = swap(a,b)
版权声明:本文为weixin_51276056原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。