1、什么是函数:
通过调用函数名,传入指定的参数,实现一个功能。
2、函数:
//声明
func 函数名(参数1,参数2 数据类型)(返回值类型){
//执行代码
return 需要返回的数据
}
//调用
函数名(参数1,参数2)
3、函数的可变参数:
概念:一个函数的参数类型确定,个数不确定,可以使用可变参数
//声明
func 函数名(nums ...int){
//函数体
return 需要返回的数据
}
//调用
函数名(参数1、参数2、参数3、参数4)
4、函数的参数传递:
按照数据的存储特点来分:
值类型的数据:
操作的是数据本身 int、string、bool.....
值传递传递的是数据的副本,修改数据对于原始数据没有影响,值类型的数据默认都是值类型,基础类型,array(数组类型)、struct
引用类型的数据:
操作的是数据的地址 slice、map、channel....
引用传递传递的是数据的地址,修改数据原始数据也会受到影响
5、函数的作用域:
作用域:变量可以使用的范围
局部变量:
函数内部定义的变量叫局部变量,只能在定义变量的函数的内部使用,if、for 定义的一次性变量是局部变量
全局变量:
函数外部定义的变量,叫全局变量,整个go 文件可以使用
注:函数内外可以定义相同变量名的变量,调用此变量时候遵循就近原则,也就是说在函数内调用该变量名调用的就是函数内部的该变量,如果函数内部没有再去找函数外部的,在函数外部调用的是全局变量。
6、函数之递归:
递归函数:自己调用自己,需要一个出口也就是出口条件,递归函数消耗内存,业务中一般不要使用
package main
import "fmt"
func main() {
//函数调用
fmt.Println(recursion(0))
}
func recursion(n int) int {
//出口条件
if n == 100{
return 100
}
//打印当前函数的参数
fmt.Println(n)
//返回调用自身
return recursion(n + 1)
}
7、defer函数:
defer解释:程序在当前位置就绪,其他程序从上到下执行完之后,有defer的函数从下往上执行,注意defer结果在从上到下执行的时候已经就绪了。
package main
import "fmt"
func main() {
num := 1
//1
PrintNum(num)
num += 3
//2
defer PrintNum(num)
num += 3
//3
defer PrintNum(num)
num += 3
//4
PrintNum(num)
num += 3
//5
PrintNum(num)
}
func PrintNum(n int){
fmt.Println(n)
}
//看执行顺序 1 4 5 3 2
//看打印结果 1 10 13 7 4
//看我写的解释
8、函数的数据类型:
函数本身也是一种数据类型,是引用类型的(共用一个内存地址)
package main
import "fmt"
func main() {
//定义一个函数变量
var f1 func(int,int) int
//打印查看其类型
fmt.Printf("%T\n" , f1)
// 结果:func(int, int) int
fmt.Printf("%T\n", f2)
//结果:func(int, int) int
fmt.Printf("%T\n", f3)
//结果:func(int, int)
fmt.Printf("%T\n", f4)
//结果:func()
//赋值
f1 = f2
// 打印赋值后的f1
fmt.Println(f1(1,2))
//结果:3
}
func f2(a,b int) int{
return a+b
}
func f3(a,b int){
}
func f4(){
}
//代码虽少,理解就好
9、匿名函数、回调函数:
//匿名函数自动调用自己
func() string{
return "666"
}()
//回调函数
//函数的参数是一个函数
type func_cate func(int,int) int //声明一个函数类型
//定义一个函数作为实际参数,类型与我们声明的函数类型相同
func f2(a,b int) int{
return a+b
}
//定义一个参数中有函数的参数
func f4(a int, funcp func_cate)int {
return a + funcp(1,2)
}
//最后调用
print(f4(5,f2))
闭包:
函数套函数,内部函数调用外部函数的局部变量,外部函数返回内部函数。
局部变量会随着函数的调用而创建,随着函数的结束而销毁,但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还在继续使用。
懒了,我就不敲代码了,有人看我再补吧
函数几种形式:
无参无返回值函数
有一个参数的函数
有两个参数的函数
有一个返回值的函数
有多个返回值的函数
注:基础学习到这就结束了,有时间更新进阶web吧,有错误请指出,谢谢。