Go基础的一些东西(写的很垃圾)2

本文深入探讨Go语言的关键特性,包括闭包的使用,如何实现变参函数,理解defer的压栈执行机制,递归函数的应用,以及错误处理的技巧,如err、panic和recover。示例代码详细展示了这些概念的实际操作,帮助读者掌握Go语言的高级特性。
摘要由CSDN通过智能技术生成

#####闭包

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,
        },
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值