golang 函数(1)

Go 里面有三种类型的函数:

1.普通的带有名字的函数

2.匿名函数或者lambda函数

3.方法

函数重载(function overloading)指的是可以编写多个同名函数,只要它们拥有不同的形参与/或者不同的返回值,在 Go 里面函数重载是不被允许的。这将导致一个编译错误:

funcName redeclared in this book, previous declaration at lineno

Go 语言不支持这项特性的主要原因是函数重载需要进行多余的类型匹配影响性能;没有重载意味着只是一个简单的函数调度。所以你需要给不同的函数使用不同的名字,我们通常会根据函数的特征对函数进行命名

函数也可以以申明的方式被使用,作为一个函数类型,就像:

type binOp func(int, int) int // 类型

按值传递和按引用传递

Go 默认使用按值传递来传递参数,也就是传递参数的副本。使用变量的过程中可能对副本的值进行更改,不会影响到原来的变量

如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(指针或引用)(变量名前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,我们可以通过这个指针的值来修改这个值所指向的地址上的值。(译者注:指针也是变量类型,有自己的地址和值,通常指针的值指向一个变量的地址)

按引用传递我觉得也是按值传递,只是这个值是引用的内存地址.

几乎在任何情况下,传递指针(一个32位或者64位的值)的消耗都比传递副本来得少。

在函数调用时,像切片(slice)、字典(map)、接口(interface)、通道(channel)这样的引用类型都是默认使用引用传递(即使没有显式的指出指针)。

猜你喜欢

转载自www.cnblogs.com/dream-again/p/11495888.html