Go每日一题(60) 的题目如下

4367 次点击 · 7 赞 ·大约8小时之前 开始浏览   · 来源「公众号「polarisxu」」

以下代码输出什么?

package main

import (
    "fmt"
    "time"
)

func main() {
    ch1 := make(chan int)
    go fmt.Println(<-ch1)
    ch1 <- 5
    time.Sleep(1 * time.Second)
}

A:5、B:不能编译;C:运行时死锁

4367 阅读
47 回复
euibieur894
euibieur894 · #1 · 3年之前

打卡

bing_lan
bing_lan · #2 · 3年之前

如何看到往日的题目?

linhebin
linhebin · #3 · 3年之前

<-ch1 先执行再 调起

运行时死锁

henry1
henry1 · #4 · 3年之前

学到了

Natsuwau
Natsuwau · #5 · 3年之前

mark

neil_liu
neil_liu · #6 · 3年之前

mark

henry1
henry1 · #7 · 3年之前

二次打卡

abcdhope
abcdhope · #8 · 3年之前

goroutine后语句的调用

cc1234
cc1234 · #9 · 3年之前

死锁

neil_liu
neil_liu · #10 · 3年之前

学到了

brothersam
brothersam · #11 · 3年之前

Mark。(golang码农求职)

mingliangge
mingliangge · #12 · 3年之前

1

Zuos
Zuos · #13 · 3年之前

mark

mingtop
mingtop · #14 · 3年之前

函数调用之前,实参就被求值好了。

因此这道题目 go fmt.Println(<-ch1) 语句中的 <-ch1 是在 main goroutine 中求值的。这相当于一个无缓冲的 chan,发送和接收操作都在一个 goroutine 中(main goroutine)进行,因此造成死锁。

a406299736
a406299736 · #15 · 3年之前

mark。。。。。。

AntonyZhang
AntonyZhang · #16 · 3年之前

打卡

haha_cat
haha_cat · #17 · 2年之前

go 后面得函数参数会先求值 mark

NovaChaos
NovaChaos · #18 · 2年之前

mk

feiyang
feiyang · #19 · 2年之前

因此这道题目 go fmt.Println(<-ch1) 语句中的 <-ch1 是在 main goroutine 中求值的。这相当于一个无缓冲的 chan,发送和接收操作都在一个 goroutine 中(main goroutine)进行,因此造成死锁。

huangyf168
huangyf168 · #20 · 2年之前

打卡

hades2013
hades2013 · #21 · 2年之前

打卡学习

Dessert
Dessert · #22 · 2年之前
mingtopmingtop #14 回复

函数调用之前,实参就被求值好了。 因此这道题目 go fmt.Println(<-ch1) 语句中的 <-ch1 是在 main goroutine 中求值的。这相当于一个无缓冲的 chan,发送和接收操作都在一个 goroutine 中(main goroutine)进行,因此造成死锁。

学到了

hasbug
hasbug · #23 · 2年之前

mark

a406299736
a406299736 · #24 · 2年之前

mark

zzustu
zzustu · #25 · 2年之前
don178
don178 · #26 · 2年之前

细啊

OrdinaryYZH
OrdinaryYZH · #27 · 2年之前

mark

feiyang
feiyang · #28 · 2年之前

因此这道题目 go fmt.Println(<-ch1) 语句中的 <-ch1 是在 main goroutine 中求值的。这相当于一个无缓冲的 chan,发送和接收操作都在一个 goroutine 中(main goroutine)进行,因此造成死锁。

YuPeng
YuPeng · #29 · 2年之前

打卡 确实基础不扎实啊 看来是

xutao
xutao · #30 · 2年之前

mark

brothersam
brothersam · #31 · 2年之前

C:运行时死锁 go func(){fmt.Println(<-ch1)}() 就对了

hasbug
hasbug · #32 · 2年之前

mark

huangyf168
huangyf168 · #33 · 2年之前

mark

yayaleslie
yayaleslie · #34 · 2年之前

mark

_Aiden_
_Aiden_ · #35 · 2年之前

mark

KpiHang
KpiHang · #36 · 2年之前

打卡第一天

cherGou
cherGou · #37 · 2年之前

马一下。

YuPeng
YuPeng · #38 · 2年之前

mark

zhupp
zhupp · #39 · 2年之前

mark

hasbug
hasbug · #40 · 2年之前

mark

na-ee
na-ee · #41 · 2年之前

image.png image.png

nhky2020
nhky2020 · #42 · 2年之前

学习了

a406299736
a406299736 · #43 · 2年之前

mark

zhangwei_go
zhangwei_go · #44 · 大约1年之前

go fmt.Println(<-ch1) 参数会先计算值, 所以执行<-ch1就是死锁了

func( fmt.Println(<-ch1) ) {}() 修改这样就不会死锁了, 匿名函数不会提前计算

brothersam
brothersam · #45 · 大约1年之前

死锁

Qmfuser
Qmfuser · #46 · 10月之前

mark

BigBigGopher
BigBigGopher · #47 · 10月之前

mark

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传