Go语言中函数的定义与使用

主要讲解Go语言中 func 的定义和使用

主要知识点:

  • func 函数的几种定义形式
  • 多返回值定义函数的用法主要用于放回错误,防止程序中断
  • 函数式编程中将函数作为参数传递给函数
  • 匿名函数的写法
  • Go语言中可变参数列表的使用
  • Go语言中没有函数重载,可选参数 等概念
  • Go语言中没有引用传递的概念,默认情况下所有的参数传递都是值传递,但是可以手动设置指针传递,类似于引用传递的效果。

以下通过代码进行示例:

package main

import (
	"fmt"
	"reflect"
	"runtime"
)

//写法1,普通写法(推荐)
func div1(a,b int) (int ,int)  {
	return a/b,a%b // 返回多个值,此处返回两个数的商和余数
}
//写法2,为返回值定义名称,此种方式 仅用于逻辑非常简单的函数
// 多返回值,不能随意使用,一般用法是 第一个为业务返回值,第二个为 错误信息
func div2(a,b int) (q,r int)  {
	q = a/b
	r = a%b
	return
}

//写法3,函数式编程,可以将函数的输入参数定义为函数
func apply(op func(int,int) int,a,b int)  int {
	//获取函数对应的指针
	p:=reflect.ValueOf(op).Pointer()
	opName:=runtime.FuncForPC(p).Name()
	fmt.Printf("Calling function %s with args (%d,%d)",opName,a,b)
	fmt.Println()
	return op(a,b)

}

//写法4,可变参数列表
func sum(numbers ...int) int   {
	s:=0
	for i:= range  numbers{
		s += numbers[i]
	}
	return s
}

//写法5,值传递与引用传递
//Go 中所有的 参数传递 都是 值传递,但是添加一些操作可以修改为引用传递
// * 代表应用传递

func swap(a,b *int)  {
	*a,*b=*b,*a
}



func main() {
	fmt.Println(div1(13,3)) //4 1
	q,_:=div2(13,3) // r 的值 不想用到,则可以使用 _ 代替
	fmt.Println(q) // 4

	//使用匿名函数 作为函数的参数
	fmt.Println(apply(func(i int, i2 int) int {
		return i+i2
	},1,2)) //3

	fmt.Println(sum(1,2,3,4,5)) //15

	///// 传入参数是需要添加 & 符号,表示传递指针
	a,b:=3,4
	swap(&a,&b)
	fmt.Println(a,b) //4 3
}

猜你喜欢

转载自my.oschina.net/ruoli/blog/1815460
今日推荐