版权声明:本文为HCG原创文章,未经博主允许不得转载。请联系[email protected] https://blog.csdn.net/qq_39455116/article/details/82726347
GO语言 —–函数
A:单个返回值或者没有返回值
func function_name
( [parameter list] ) 参数列表,不是必须的,但是不传参数的时候必须有括号
[return_types] 返回参数,不是必须的
{
函数体
}
B:多个返回值,用括号
func function_name
( [parameter list] ) 参数列表,不是必须的,但是不传参数的时候必须有括号
([return_types]) 返回参数,不是必须的
{
函数体
}
1.func main() {
/* 定义局部变量 */
var a int = 100
var b int = 200
var ret int
/* 调用函数并返回最大值 */
ret = max(a, b)
fmt.Printf( "最大值是 : %d\n", ret )
}
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 定义局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
2.函数传入参数问题
1.正常传输参数
2.引用传参
func swap(x *int, y *int) {
var temp int
temp = x / 保持 x 地址上的值 */
x = *y / 将 y 值赋给 x */
y = temp / 将 temp 值赋给 y */
}
var a int = 100
var b int= 200
fmt.Printf("交换前,a 的值 : %d\n", a )
fmt.Printf("交换前,b 的值 : %d\n", b )
/* 调用 swap() 函数
* &a 指向 a 指针,a 变量的地址
* &b 指向 b 指针,b 变量的地址
*/
swap(&a, &b)
3.Go 语言支持匿名函数,可作为闭包。匿名函数是一个”内联”语句或表达式。
匿名函数的优越性在于可以直接使用函数内的变量,不必申明。
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 为一个函数,函数 i 为 0 */
nextNumber := getSequence()
/* 调用 nextNumber 函数,i 变量自增 1 并返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 创建新的函数 nextNumber1,并查看结果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
输出的结果是12312
package main
import "fmt"
func main() {
add_func := add(1,2)
fmt.Println(add_func(1,1))
fmt.Println(add_func(0,0))
fmt.Println(add_func(2,2))
}
// 闭包使用方法
func add(x1, x2 int) func(x3 int,x4 int)(int,int,int) {
i := 0
return func(x3 int,x4 int) (int,int,int){
i++
return i,x1+x2,x3+x4
}
}
输出结果:
1 3 2
2 3 0
3 3 4
以上两个闭包的实例说明大函数里面的参数只会用一次,
小函数里面的参数在变化