Go每日一题 今日(2025-04-02) 的题目如下

4448 次点击 · 10 赞 ·大约8小时之前 开始浏览   · 来源「Golang修养之路」

执行下面的代码会发生什么?

package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int, 1000)
	go func() {
		for i := 0; i < 10; i++ {
			ch <- i
		}
	}()
	go func() {
		for {
			a, ok := <-ch
			if !ok {
				fmt.Println("close")
				return
			}
			fmt.Println("a: ", a)
		}
	}()
	close(ch)
	fmt.Println("ok")
	time.Sleep(time.Second * 100)
}
4448 阅读
55 回复
YuPeng
YuPeng · #51 · 7月之前
ws1992gows1992go #9 回复

题解:过早的关闭 channel 导致了 panic 但是我有一个问题,将代码改正确,为什么 `fmt.Println("close")` 没有被打印呢?

多运行几次偶然会打出来

zhangwei_go
zhangwei_go · #52 · 4月之前

15字口诀:“空读写阻塞,写关闭异常,读关闭空零”,往已经关闭的 channel 写入数据会 panic。

zhangwei_go
zhangwei_go · #53 · 4月之前

空读写阻塞,写关闭异常,读关闭空零

na-ee
na-ee · #54 · 4月之前

image.png

euibieur894
euibieur894 · #55 · 4月之前

打卡

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