匿名函数
- 匿名函数就是没有函数名的函数,匿名函数多用于
回调函数和闭包
- 格式如下:
func(参数)(返回值){
// 函数体
}
匿名函数常用格式
**package main
import (
"fmt"
)
func main() {
sayHello := func () {
fmt.Println("say hello go")
}
sayHello()
func(a, b int) {
fmt.Println(a + b)
}(1, 2)
}
闭包
- 闭包指的是一个函数和其相关的应用环境组合而成的实体;
闭包=函数+引用环境
package main
import (
"fmt"
"strings"
)
func main() {
test := say()
test()
strFunc := makeSuffix("沫沫")
str1 := strFunc("asdfadsgdsg沫沫")
str2 := strFunc("asdfadsgdsg")
fmt.Println(str1, str2)
add, sub := calc(5)
add(2)
add(3)
sub(1)
}
func say() func(){
name := "蒋小白"
return func() {
fmt.Println("hello", name)
}
}
func makeSuffix(suffix string) func(string) string {
return func(name string) string {
if !strings.HasSuffix(name, suffix) {
return name + suffix
}
return name
}
}
func calc(base int) (func(int) int, func(int) int) {
add := func(i int) int {
base += i
return base
}
sub := func(i int) int {
base -= i
return base
}
return add, sub
}

内置行数
- close: 用来关闭channel
- len: 用来求长度 string, array, slice, map, channel
- new: 用来分配内存,主要用来分配值类型,比如int, struct, 返回的是指针
- make: 用来分配内存,主要用来分配引用类型, chan,map,slice
- append: 用来追加元素到slice中
- panic和 recover: 用来错误处理
- panic: 可以在任何地方引发
- recover: 只在defer调用的函数中有效 (回复执行状态,收集错误日志)
package main
import (
"fmt"
)
func main() {
a()
b()
c()
}
func a() {
fmt.Println("func a")
}
func b() {
defer func() {
err := recover()
if err != nil {
fmt.Println("func b is error")
}
}()
panic("panic in b")
fmt.Println("func b")
}
func c() {
fmt.Println("func c")
}
