【Golang 面试题】每日 3 题(六十八)

✍个人博客:Pandaconda-优快云博客
📣专栏地址:http://t.csdnimg.cn/UWz06
📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

202. 接口和结构体的关系

接口定义行为规范:Go 语言中的接口是一组方法签名的集合,它定义了对象的行为规范,不关心具体实现。

结构体实现接口:结构体可以实现一个或多个接口,通过实现接口中定义的所有方法,表明该结构体具备接口所规定的行为。

多态实现:一个接口类型的变量可以指向实现该接口的任意结构体实例,从而实现多态。比如:

package main

import "fmt"

type Shape interface {
    Area() float64
}

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}

func main() {
    var s Shape
    s = Rectangle{Width: 5, Height: 3}
    fmt.Printf("Rectangle area: %f\n", s.Area())

    s = Circle{Radius: 4}
    fmt.Printf("Circle area: %f\n", s.Area())
}

203. 内存分配机制

栈内存:Go 语言中,局部变量、函数参数等通常分配在栈上,栈的分配和释放由编译器自动管理,速度快,但栈大小有限。

堆内存:通过new和make关键字创建的对象,如切片、map、结构体指针等,会分配在堆上。堆内存的管理由 Go 的垃圾回收器(GC)负责,其分配灵活但开销相对较大。

逃逸分析:编译器通过逃逸分析决定变量是在栈上还是堆上分配。若变量的生命周期超出函数范围或无法在编译期确定大小等情况,就会发生逃逸,被分配到堆上。

204. defer 关键字

作用:defer用于延迟执行函数调用,在函数执行结束时,按照先进后出(FILO)的顺序执行被defer的函数。常用于资源清理,如关闭文件句柄、释放数据库连接等。

执行时机:defer语句在遇到时,会将其后面的函数调用入栈,等到外围函数执行完毕,无论是正常返回还是发生错误,都会依次执行栈中的defer函数。

示例:

package main

import "fmt"

func main() {
    fmt.Println("Start")
    defer fmt.Println("Defer 1")
    defer fmt.Println("Defer 2")
    fmt.Println("End")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值