golang学习笔记 函数

函数

为什么要使用函数!

提高代码的复用型,减少代码的冗余,代码的维护性也提高了

函数的定义:

为完成某一功能的程序指令(语句)的集合,称为函数。

基本语法

func 函数名(形参列表)(返回值类型列表){
执行语句…
return +返回值列表
}

示例

package main

import (
	"fmt"
)
//定义一个2个数求和的函数mang
func mang (sum1 int,sum2 int) int {//返回值一个时可以把()省掉
	sum := sum1 + sum2
	return sum
}

func mang1 (sum1 int,sum2 int)(int,int){//返回值有两个或多个时,需要使用()
	sumjia := sum1 + sum2
	sumjian := sum1 - sum2
	return sumjia,sumjian
}

func main()  {
	sum := mang(10,20)//调用mang函数求和
	fmt.Println(sum)
	fmt.Println("---------") //隔断
	sum2,sum3 := mang1(10,20)//调用mang1函数求和与差
	fmt.Println(sum2,sum3)
}

结果:

请添加图片描述

案例

package main

import (
	"fmt"
)
//定义一个交换函数
func exchangeNum(num1 int,num2 int) {	
	i := num1
	num1 = num2
	num2 = i
}
func main()  {
	var a int = 66
	var b int = 99
	fmt.Printf("a=%v , b=%v\n",a,b)//未交换前输出a与b的值
	fmt.Println("---------")
	exchangeNum(a,b)//调佣exchangeNum交换a,b
	fmt.Printf("a=%v , b=%v",a,b)//交换后输出a与b的值
}

结果:交换失败

在这里插入图片描述

内存分析:

在这里插入图片描述

Golang中函数不支持重载

同一个包内不能有两个同名的函数

Golang中支持可变参数(如果你希望函数带有可变数量的参数)

基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。

package main

import(
	"fmt"
)
//定义一个函数,函数的参数为:可变参数...参数的数量可变
func test (num...int){//num...int 可以传入任意多个数量的int类型的数据 传入0个,1个,,,,n个
	for i := 1; i < len(num); i++ {
		fmt.Println(num[i])
	}
}
func main()  {
	test(1)
	fmt.Println("-------")
	test(1,2)
	fmt.Println("-------")
	test(1,2,3)
	fmt.Println("-------")
	test(1,2,3,4)
	fmt.Println("-------")
	test(1,2,3,4,5)
}

在这里插入图片描述

以值传递方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果来看类似引用传递。

package main

import (
	"fmt"
)
//定义一个改变输入指向地址储存的值的函数
func today(num *int)  {
	*num = 30
}

func main(){
	var num int = 10
	today(&num)//调用函数改变num指向内存地址储存的值
	fmt.Println(num)
}

在这里插入图片描述

在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。

函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用(把函数本身当做一种数据类型)

package main

import (
	"fmt"
)
//定义一个函数
func test (sum int){
	fmt.Println(sum)
}
func main()  {
	a := test  //将a定义为test数据类型
	fmt.Printf("a的数据类型是%T,test的数据类型是%T\n",a,test)
	//a的数据类型是func(int),test的数据类型是func(int)
	test1(5,test)
	test1(6,a)
}
//func(int)函数作为一种数据类型可以作为形参用于函数的定义
func test1(sum int,sum1 func(int))  {
	fmt.Println("---666---")
}

在这里插入图片描述

)

Go支持自定义数据类型

基本语法: type 自定义数据类型名 数据类型

package main

import (
	"fmt"
)

func main()  {
	type kkk int
	var a kkk = 5
	fmt.Printf("a的数据类型是%T,a的值为%v\n",a,a)
	c := test//将b定义为func(int)数据类型
	test01(6,test) 
	test01(8,c)
}
//定义一个函数,可以作为数据类型使用
func test(sum int)  {
	fmt.Println("----9999----")
}
type myFunc func(int)//给func(int)定义名字为jjj,并用做test01函数作为形参
func test01(a int,b myFunc)  {
	fmt.Println("----6666----")
}

在这里插入图片描述

支持对函数返回值命名

package main

import (
	"fmt"
)
//定义一个求和与求差的函数
//对函数返回值进行命名,函数体顺序不用对应
func test(a int,b int)(sum int,sum1 int)  {
	sum1 = a-b
	sum = a+b
	return
}

func main()  {
	a,b:=test(10,20)
	fmt.Println(a,"\n",b)
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值