Golang中的闭包
Golang中的闭包闭包其实可以理解成定义在一个函数内部的函数。在本质上,闭包是将函数内部和函数外部连接起来的桥梁,或者说是函数和其引用环境的组合体。
闭包指的是一个函数与其相关的引用环境组合而成的实体。简单来说,闭包=函数+引用环境。
首先我们来看一个例子:12345678910111213141516171819202122232425262728package mainimport "fmt"func add() func(y int) int { var x int return func(y int) int { x = x + y return x }}func main() { f := add() r := f(10) fmt.Printf("r: %v\n", r) r = f(20) fmt.Printf("r: %v\n", r) r = f(30) fmt.Printf("r: %v\n", r) f1 := add() r = ...
Golang中的匿名函数
Golang中的匿名函数Golang中的函数不能嵌套,但是在函数内部可以定义匿名函数,实现一下简单功能的调用。
所谓匿名函数就是,没有名称的函数。
语法格式如下:
1func (参数列表)(返回值)
当然可以既没有参数,可以没有返回值
匿名函数实例123456789101112131415package mainimport "fmt"func main() { max := func(a int, b int) int { if a > b { return a } else { return b } } i := max(1, 2) fmt.Printf("i: %v\n", i)}
运行结果:
1i: 2
自己执行1234567891011121314package mainimport "fmt"func main() { max := func(a int, b int) int { if ...
Golang中的高阶函数
Golang中的高阶函数Golang中的函数,可以作为函数的参数,传递给另外一个函数,可以作为另一个函数的返回值返回。
Golang中的函数作为参数123456789101112131415package mainimport "fmt"func sayHello(name string) { fmt.Printf("Hello,%s", name)}func f1(name string, f func(name string)) { f(name)}func main() { f1("WeiYunfeng", sayHello)}
运行结果:
1Hello,WeiYunfeng
Golang中的函数作为返回值123456789101112131415161718192021222324252627282930package mainimport "fmt"func add(a int, b int) int { return a ...
Golang中的函数类型与函数变量
Golang中的函数类型与函数变量可以使用type关键字来定义一个函数类型,语法格式如下:
1type fun func(int,int) int
上面语句定义了一个fun函数类型,它是一种函数类型,这种函数接收两个int类型的参数并返回一个int类型的返回值。
下面定义两个这样结构的两个函数,一个求和,一个比大小:
1234567891011func sum(a int,b int) int { return a+b}func max(a int,b int) int { if a>b{ return a }else{ return b }}
下面定义一个fun函数类型,把sum和max赋值给它
1234567891011121314151617181920212223242526package mainimport "fmt"func sum(a int, b int) int { return a + b}func max(a int, b int) ...
Golang函数的参数
Golang函数的参数Golang中的函数可以有0或多个参数,参数需要指定数据类型。
声明函数时的参数列表叫做形参,调用时传递的参数叫做实参。
Golang中是通过传值的方式传参的,意味着传递给函数的是拷贝后的副本,所以函数内部访问、修改的也是这个副本。
Golang中可以使用变长参数,有时候并不能确定参数的个数,可以使用变长参数,可以在函数定义语句的参数部分使用ARGS...TYPE的方式。这时会将...代表的参数全部保存到一个名为ARGS的slice中,注意这些参数的数据类型都是TYPE。
Golang中函数的参数实例Golang传参123456789101112131415161718package mainimport "fmt"//形参func f1(a int, b int) int { if a > b { return a } else { return b }}func main() { //实参 r := f1(1, 2) fmt.Printf("r: %v ...
Golang中函数的返回值
Golang中函数的返回值函数可以有0或多个返回值,返回值需要指定数据类型,返回值通过return关键字来指定。
return可以有参数,也可以没有参数,这些返回值可以有名称,也可以没有名称。Golang中的函数可以有多个返回值。
1.return关键字中指定了参数时,返回值可以不用名称。如果return省略参数,则返回值部分必须带名称。
2.当返回值有名称时,必须使用括号包围,逗号分隔,即使只有一个返回值。
3.但即使返回值命名了,return中也可以强制指定其他返回值的名称,也就是说return的优先级更高
4.命名的返回值是预先声明好的,在函数内部可以直接使用,无需再次声明。命名返回值的名称不能和函数参数名称相同,否则报错提示变量重复定义。
5.return中可以有表达式,但不能出现赋值表达式,这和其他语言可能有点不一样。例如return a+b是正确的,但是return c=a+b则是错误的
Golang中函数返回值实例没有返回值123func f1() { fmt.Printf("我没有返回值,我只是进行一些计算")}
有一个返回值1 ...
Golang中的函数
Golang中的函数Golang函数简介函数是Golang中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称、参数列表和返回值类型,这些构成了函数的签名(signature)。
Golang中函数的特性1.Golang中有3种函数:普通函数、匿名函数(没有名称的函数)、方法(定义在struct上的函数)。receiver
2.Golang中不允许函数重载(overload),也就是不允许函数同名。
3.Golang中的函数不能嵌套函数,但可以嵌套匿名函数。
4.函数是一个值,可以将函数赋值给变量,使得这个变量也成为函数。
5.函数可以作为参数传递给另一个函数。
6.函数的返回值可以是一个函数。
7.函数调用的时候,如果有参数传递给函数,则先拷贝参数的副本,再将副本传递给函数。
8.函数参数可以没有名称。
Golang中函数的定义和调用函数在使用之前必须先定义,可以调用函数来完成某个任务。函数可以重复调用,从而达到代码重用。
Golang中函数定义语法123func function_name( [parameter list] ) [return_typ ...
Golang中的遍历map
Golang中的遍历map可以使用for range循环进行map遍历,得到key和value值。
遍历key以及遍历key+value12345678910111213141516171819package mainimport "fmt"func forr_key_map() { var m1 = make(map[string]string) m1["name"] = "weiyunfeng" m1["age"] = "23" m1["email"] = "[email protected]" for k := range m1 { fmt.Printf("key: %v\n", k) } for k1, v := range m1 { fmt.Printf("%v: %v\n", k1, v) }}func main() { fo ...
Golang中的map
Golang中的mapmap是一种key:value键值对的数据结构容器,map内部实现是哈希表(hash)。
map是最重要的一点是通过key来快速检索数据,key类似于索引,只想数据的值。
map是引用类型的。
map的语法格式可以使用内建函数make也可以使用map关键字来定义map
1234/*声明变量,默认map是nil*/var map_variable map[key_data_type]value_data_type/*使用make函数*/map_variable = make(map[key_data_type]value_data_type)
map_variable:map变量名称
key_data_type:key的数据类型
value_data_type:值的数据类型
实例下面声明一个保存个人信息的map
123456789101112131415161718192021222324252627282930package mainimport "fmt"func map_variable() { //类型的声明 var m1 m ...
Golang中切片元素的添加和删除copy
Golang中切片元素的添加和删除copy切片是一个动态数组,可以使用append()函数添加元素,Golang中并没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素。由于,切片是引用类型,通过赋值的方式,会修改原有内容,Golang提供了copy函数来拷贝切片。
添加元素123456789101112131415package mainimport "fmt"func add_slice() { var s1 = []int{} s1 = append(s1, 100) s1 = append(s1, 200) s1 = append(s1, 300) fmt.Printf("s1: %v\n", s1)}func main() { add_slice()}
运行结果
1s1: [100 200 300]
删除元素123456789101112package mainimport "fmt"func delete_slice() { var ...