GO语言笔记——函数
函数重要语法
切片的使用
- 用make()函数来创造切片
var slice1 []type = make([]type, len)
slice1 := make([]type ,len)
- 创建基于数组的切片
a := [5]int{1,2,3,4,5}
var b[]int = a[1:3]
b := a[1:3]
- 切片的长度时切片元素的数量,切片的容量是从创建切片的索引开始的底层数组中元素的数量。
- 添加元素
- append()
- 复制元素
- copy()
- append函数会改变slice所引用的数组的内容,从而影响到引用同一数组的其它slice。 但当slice中没有剩
余空间(即(cap-len) == 0)时,此时将动态分配新的数组空间。返回的slice数组指针将指向这个空间,而原
数组的内容将保持不变;其它引用此数组的slice则不受影响。
+++
Map的使用
-
Map是GO中的内置类型,它将一个值与一个键关联起来。可以使用相应的键检索值。
-
Map是使用hash表来实现的,所以是无序的,不能通过index来获取,而是必须通过key获取
使用map(),也可以使用make来定义map
var map_variable map[key_data_type]value_data_type
map_variable = make(map[key_data_type]value_data_type)
函数
- 可变参
func myfunc(arg ...int){}
全局变量所有函数都是共享的
-
defer语句,会在函数执行到最后时,照逆序执行,最后该函数返回。
-
defer同样适用于一个方法的调用
-
延迟函数的参数在执行延迟语句时被执行,而不是在执行实际的函数调用时执行。
func printA(a int){
fmt.Println("Value of a in deferred function",a)
}
func main() {
//nums := []int{78, 109, 2, 563, 300}
//largest(nums)
a := 5
defer printA(a)
a = 10
fmt.Println("value of a before deferred function call",a)
}
运行结果:
value of a before deferred function call 10
Value of a in deferred function 5
多个defer例:
func main() {
defer printString("hello")
fmt.Println("main中执行了。。。。")
defer printString("world")
a := 1
defer fun1(a) //将a传递参数,只是暂时不执行。。
a = 100
defer fun1(a)
fmt.Println(a) // 100
}
func fun1(num int){
fmt.Println("我是fun1函数。。num:",num)
}
//练习1:利用defer语句,将一个字符串倒叙输出。
func printString(letter string){
fmt.Println(letter)
}
运行结果:
main中执行了。。。。
100
我是fun1函数。。num: 100
我是fun1函数。。num: 1
world
hello
range
range调用返回两个值,一个是引用的索引,另一个是值
for _ , v := range nums {
if v > max {
max = v
}
匿名函数
定义一个匿名函数,直接进行调用,通常只能调用一次,也可以将匿名函数赋值给某个函数变量,就可以调用多次
- 将函数作为另一个函数的参数,回调函数
- 将函数作为另一个函数的返回值
高阶函数
func1()func2()
将func1函数作为func2这个函数的参数,func2就叫做高阶函数
func1():回调函数
闭包
一个外层函数中,有内层函数,该内层函数中,会操作外层函数中的局部变量(外层函数中的参数,
或者外层函数直接定义的变量),并且该外层函数的返回值就是这个内层函数。

浙公网安备 33010602011771号