Go-每日面试题目~(一)

161 篇文章 12 订阅

原文地址:Go-每日面试题目~(一)

1、ch:=make(chan interface{})和ch:=make(chan interface{},1)有什么区别?

第一个是声明无缓存channel,第二个是声明缓冲为1的channel,无缓存channel需要一直有接收者接收数据,写操作才会继续,否则一直阻塞,而缓冲为1的channel即使没有接收者也不会阻塞,因为其缓冲大小是1,只有放第二个值时,第一个还没被取出时候才会阻塞,这两者还是有区别的。

2、以下代码会输出什么?请简要说明。

var mu sync.Mutex
var chain string

func main() {
    chain = "main"
    A()
    fmt.Println(chain)
}
func A() {
    mu.Lock()
    defer mu.Unlock()
    chain = chain + " --> A"
    B()
}

func B() {
    chain = chain + " --> B"
    C()
}

func C() {
    mu.Lock()
    defer mu.Unlock()
    chain = chain + " --> C"
}

上述代码会输出fatal error,首先mu是全局的,在A()方法中一开始就使用mu的Lock()加锁了,之后在A()中调用B(),B()中调用C(),C()方法中又使用mu的Lock()加锁,这是不允许的,需要A()调用完后执行defer时利用Unlock()解锁后从C()才能再使用mu的Lock()加锁。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值