#####闭包
func f(i int) func() int {
return func() int {
i++
return i
}
}
a := f(0)
fmt.Println(a())
#####变参函数
func(aa ...int) {
for _, asd := range aa {
fmt.Println(asd)
}
}(1, 2, 3, 4)
#####压栈defer
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
//3 2 1
#####递归函数
func digui(i int) (q int) {
if i == 1 {
return 1
} else {
return i * digui(i-1)
}
}
#####err panic recover
https://www.jianshu.com/p/0cbc97bd33fb
//recover()必须搭配defer使用
//defer一定要在有可能引发panic的语句之前定义
func main() {
a()
b()
c()
}
func a() {
fmt.Println("funca")
}
func b() {
defer func() {
err := recover()
if err != nil {
fmt.Println("func b error")
}
}()
panic("panic in b")
}
func c() {
fmt.Println("funcc")
}
#####struct 定义 分配 初始化
type point struct {
x int
y int
}
//正常初始化
var p point
p.x = 10
p.y = 11
//用new()分配空间
qq := new(point)
qq.x = 12
qq.y = 13
//指定一个地址
ww := &point{}
ww.x = 14
ww.y = 15
//键值对定义初始化
tt := point{
x: 1,
y: 2,
}
fmt.Println(qq, p, ww, tt)
#####方法 接收器
type Point struct {
X int
Y int
}
func (p Point) Add(other Point) Point {
return Point{p.X + other.X, p.Y + other.Y}
}
p1 := Point{1, 1}
p2 := Point{2, 2}
result := p1.Add(p2)
#####结构体嵌套
type Wheel struct {
Size int
}
type Car struct {
a int
Wheel
}
func main() {
c := Car{
a: 1,
Wheel: Wheel{
Size: 18,
},
}