GO语言学习入门笔记系列详解(四):Go语言的函数和指针

  • Post author:
  • Post category:其他




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语言只有值传递一种,不用考虑是值传递还是参数传递。

有以下几种情况:

  1. 变量传给函数(参数也是变量)

image-20220510224549805

  1. 变量传给函数(参数是指针)地址被拷贝了一遍

在这里插入图片描述

  1. Object传给函数,参数也是Object


    go语言自定义的时候就要考虑到当作指针来用还是当作值来用。

image-20220510225018783

  • 举例子:交换两个变量的值(不是最佳交换方法)
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 版权协议,转载请附上原文出处链接和本声明。