[{"data":1,"prerenderedAt":1074},["ShallowReactive",2],{"content:\u002F2025\u002F08\u002Fgo-channel4":3,"surround:\u002F2025\u002F08\u002Fgo-channel4":1063},{"id":4,"title":5,"body":6,"categories":1041,"date":1043,"description":1044,"draft":1045,"extension":1046,"image":1047,"meta":1048,"navigation":73,"path":1050,"permalink":1047,"published":1047,"readingTime":1051,"recommend":1047,"references":1047,"seo":1056,"sitemap":1057,"stem":1058,"tags":1059,"type":1061,"updated":1043,"__hash__":1062},"content\u002Fposts\u002F2025\u002F08\u002Fgo-channel4.md","Go Channel 的 Select Case 用法",{"type":7,"value":8,"toc":1034},"minimark",[9,14,27,30,40,43,46,451,454,471,474,479,739,742,745,756,759,763,1027,1030],[10,11,13],"h2",{"id":12},"select-case-用法","select case 用法",[15,16,17,18,22,23,26],"p",{},"select case 主要用于对 channel 进行控制\n和我们常用的",[19,20,21],"code",{"code":21},"switch case","语句类似，但是 select case 的 case 是在",[19,24,25],{"code":25},"channel处于就绪态","才会执行\ncase 后面必须跟的是 channel 相关的表达式\n如：\nch \u003C- -- 读取\nval:=\u003C-ch -- 写入",[15,28,29],{},"什么是就绪态呢",[31,32,33,37],"ul",{},[34,35,36],"li",{},"对于无缓冲区的 channel 来说\n对于读操作，另外一个 goroutine 正在监听该 channel(成双成对)\n对于写操作，当前 channel 不处于挂起状态",[34,38,39],{},"对于有缓冲区的 channel 来说\n对于读操作，缓冲区有值\n对于写操作，缓冲区没满",[15,41,42],{},"总言而之，channel 处于非阻塞就是就绪态",[15,44,45],{},"举一个简单的例子",[47,48,53],"pre",{"className":49,"code":50,"language":51,"meta":52,"style":52},"language-go shiki shiki-themes github-light github-dark","package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc SelectCaseFunc(ch chan int) {\n\tfor {\n\t\tselect {\n\t\tcase val := \u003C-ch:\n\t\t\tfmt.Println(\"接收到值为:\", val)\n\t\t\treturn\n\t\tcase ch \u003C- 666:\n\t\t\tfmt.Println(\"channel往里面置入了值\")\n\t\tdefault:\n\t\t\tfmt.Println(\"上面channel都不位于就绪态, 暂时跳过\")\n\t\t}\n\t\ttime.Sleep(time.Millisecond * 500)\n\t}\n\n}\n\nfunc main() {\n\tch := make(chan int, 1)\n\tSelectCaseFunc(ch)\n}\n","go","",[19,54,55,68,75,89,106,118,124,129,159,172,187,214,239,251,274,294,306,326,338,364,373,378,383,388,404,432,446],{"__ignoreMap":52},[56,57,60,64],"span",{"class":58,"data-line":59,"line":59},"line",1,[56,61,63],{"class":62},"szBVR","package",[56,65,67],{"class":66},"sScJk"," main\n",[56,69,71],{"class":58,"data-line":70,"line":70},2,[56,72,74],{"emptyLinePlaceholder":73},true,"\n",[56,76,78,81,85],{"class":58,"data-line":77,"line":77},3,[56,79,80],{"class":62},"import",[56,82,84],{"class":83},"sVt8B"," ",[56,86,88],{"class":87},"sSDpw","(\n",[56,90,92,96,100,103],{"class":58,"data-line":91,"line":91},4,[56,93,95],{"class":94},"indent","\t",[56,97,99],{"class":98},"sZZnC","\"",[56,101,102],{"class":66},"fmt",[56,104,105],{"class":98},"\"\n",[56,107,109,111,113,116],{"class":58,"data-line":108,"line":108},5,[56,110,95],{"class":94},[56,112,99],{"class":98},[56,114,115],{"class":66},"time",[56,117,105],{"class":98},[56,119,121],{"class":58,"data-line":120,"line":120},6,[56,122,123],{"class":87},")\n",[56,125,127],{"class":58,"data-line":126,"line":126},7,[56,128,74],{"emptyLinePlaceholder":73},[56,130,132,135,138,141,145,148,151,154,156],{"class":58,"data-line":131,"line":131},8,[56,133,134],{"class":62},"func",[56,136,137],{"class":66}," SelectCaseFunc",[56,139,140],{"class":87},"(",[56,142,144],{"class":143},"s4XuR","ch",[56,146,147],{"class":62}," chan",[56,149,150],{"class":62}," int",[56,152,153],{"class":87},")",[56,155,84],{"class":83},[56,157,158],{"class":87},"{\n",[56,160,162,164,167,169],{"class":58,"data-line":161,"line":161},9,[56,163,95],{"class":94},[56,165,166],{"class":62},"for",[56,168,84],{"class":83},[56,170,158],{"class":171},"sJX2D",[56,173,175,177,179,182,184],{"class":58,"data-line":174,"line":174},10,[56,176,95],{"class":94},[56,178,95],{"class":94},[56,180,181],{"class":62},"select",[56,183,84],{"class":83},[56,185,158],{"class":186},"sqkie",[56,188,190,192,194,197,200,203,205,208,211],{"class":58,"data-line":189,"line":189},11,[56,191,95],{"class":94},[56,193,95],{"class":94},[56,195,196],{"class":62},"case",[56,198,199],{"class":83}," val ",[56,201,202],{"class":62},":=",[56,204,84],{"class":62},[56,206,207],{"class":62},"\u003C",[56,209,210],{"class":62},"-",[56,212,213],{"class":83},"ch:\n",[56,215,217,219,221,223,226,229,231,234,237],{"class":58,"data-line":216,"line":216},12,[56,218,95],{"class":94},[56,220,95],{"class":94},[56,222,95],{"class":94},[56,224,225],{"class":83},"fmt.",[56,227,228],{"class":66},"Println",[56,230,140],{"class":87},[56,232,233],{"class":98},"\"接收到值为:\"",[56,235,236],{"class":83},", val",[56,238,123],{"class":87},[56,240,242,244,246,248],{"class":58,"data-line":241,"line":241},13,[56,243,95],{"class":94},[56,245,95],{"class":94},[56,247,95],{"class":94},[56,249,250],{"class":62},"return\n",[56,252,254,256,258,260,263,265,267,271],{"class":58,"data-line":253,"line":253},14,[56,255,95],{"class":94},[56,257,95],{"class":94},[56,259,196],{"class":62},[56,261,262],{"class":83}," ch ",[56,264,207],{"class":62},[56,266,210],{"class":62},[56,268,270],{"class":269},"sj4cs"," 666",[56,272,273],{"class":83},":\n",[56,275,277,279,281,283,285,287,289,292],{"class":58,"data-line":276,"line":276},15,[56,278,95],{"class":94},[56,280,95],{"class":94},[56,282,95],{"class":94},[56,284,225],{"class":83},[56,286,228],{"class":66},[56,288,140],{"class":87},[56,290,291],{"class":98},"\"channel往里面置入了值\"",[56,293,123],{"class":87},[56,295,297,299,301,304],{"class":58,"data-line":296,"line":296},16,[56,298,95],{"class":94},[56,300,95],{"class":94},[56,302,303],{"class":62},"default",[56,305,273],{"class":83},[56,307,309,311,313,315,317,319,321,324],{"class":58,"data-line":308,"line":308},17,[56,310,95],{"class":94},[56,312,95],{"class":94},[56,314,95],{"class":94},[56,316,225],{"class":83},[56,318,228],{"class":66},[56,320,140],{"class":87},[56,322,323],{"class":98},"\"上面channel都不位于就绪态, 暂时跳过\"",[56,325,123],{"class":87},[56,327,329,331,333,335],{"class":58,"data-line":328,"line":328},18,[56,330,95],{"class":94},[56,332,95],{"class":94},[56,334,52],{"class":83},[56,336,337],{"class":186},"}\n",[56,339,341,343,345,348,351,353,356,359,362],{"class":58,"data-line":340,"line":340},19,[56,342,95],{"class":94},[56,344,95],{"class":94},[56,346,347],{"class":83},"time.",[56,349,350],{"class":66},"Sleep",[56,352,140],{"class":186},[56,354,355],{"class":83},"time.Millisecond ",[56,357,358],{"class":62},"*",[56,360,361],{"class":269}," 500",[56,363,123],{"class":186},[56,365,367,369,371],{"class":58,"data-line":366,"line":366},20,[56,368,95],{"class":94},[56,370,52],{"class":83},[56,372,337],{"class":171},[56,374,376],{"class":58,"data-line":375,"line":375},21,[56,377,74],{"emptyLinePlaceholder":73},[56,379,381],{"class":58,"data-line":380,"line":380},22,[56,382,337],{"class":87},[56,384,386],{"class":58,"data-line":385,"line":385},23,[56,387,74],{"emptyLinePlaceholder":73},[56,389,391,393,396,398,400,402],{"class":58,"data-line":390,"line":390},24,[56,392,134],{"class":62},[56,394,395],{"class":66}," main",[56,397,140],{"class":87},[56,399,153],{"class":87},[56,401,84],{"class":83},[56,403,158],{"class":87},[56,405,407,409,412,414,417,419,422,424,427,430],{"class":58,"data-line":406,"line":406},25,[56,408,95],{"class":94},[56,410,411],{"class":83},"ch ",[56,413,202],{"class":62},[56,415,416],{"class":66}," make",[56,418,140],{"class":171},[56,420,421],{"class":62},"chan",[56,423,150],{"class":62},[56,425,426],{"class":83},", ",[56,428,429],{"class":269},"1",[56,431,123],{"class":171},[56,433,435,437,440,442,444],{"class":58,"data-line":434,"line":434},26,[56,436,95],{"class":94},[56,438,439],{"class":66},"SelectCaseFunc",[56,441,140],{"class":171},[56,443,144],{"class":83},[56,445,123],{"class":171},[56,447,449],{"class":58,"data-line":448,"line":448},27,[56,450,337],{"class":87},[15,452,453],{},"我们来分析一下这段程序",[455,456,457,462,465,468],"ol",{},[34,458,459,460],{},"进入",[19,461,181],{"code":181},[34,463,464],{},"进入第 1 个 case: 该 channel 队列中没有值，不是处于就绪态跳过",[34,466,467],{},"进入第 2 个 case: 该 channel 没满，处于就绪态，写入 666",[34,469,470],{},"for 循环回到 select，进入第 1 个 case，处于就绪态，读出 666 并退出",[10,472,473],{"id":473},"例题",[475,476,478],"h3",{"id":477},"判断下面代码的输出可能性并说明原因","判断下面代码的输出可能性，并说明原因",[47,480,482],{"className":49,"code":481,"language":51,"meta":52,"style":52},"package main\n\nimport (\n\t\"fmt\"\n)\n\nfunc main() {\n\tch1 := make(chan int, 1)\n\tch2 := make(chan int, 1)\n\n\tch1 \u003C- 1\n\tch2 \u003C- 2\n\n\tselect {\n\tcase v := \u003C-ch1:\n\t\tfmt.Println(\"从 ch1 读取到：\", v)\n\tcase v := \u003C-ch2:\n\t\tfmt.Println(\"从 ch2 读取到：\", v)\n\tdefault:\n\t\tfmt.Println(\"都不就绪\")\n\t}\n}\n",[19,483,484,490,494,502,512,516,520,534,557,580,584,597,610,614,624,644,664,683,702,710,727,735],{"__ignoreMap":52},[56,485,486,488],{"class":58,"data-line":59,"line":59},[56,487,63],{"class":62},[56,489,67],{"class":66},[56,491,492],{"class":58,"data-line":70,"line":70},[56,493,74],{"emptyLinePlaceholder":73},[56,495,496,498,500],{"class":58,"data-line":77,"line":77},[56,497,80],{"class":62},[56,499,84],{"class":83},[56,501,88],{"class":87},[56,503,504,506,508,510],{"class":58,"data-line":91,"line":91},[56,505,95],{"class":94},[56,507,99],{"class":98},[56,509,102],{"class":66},[56,511,105],{"class":98},[56,513,514],{"class":58,"data-line":108,"line":108},[56,515,123],{"class":87},[56,517,518],{"class":58,"data-line":120,"line":120},[56,519,74],{"emptyLinePlaceholder":73},[56,521,522,524,526,528,530,532],{"class":58,"data-line":126,"line":126},[56,523,134],{"class":62},[56,525,395],{"class":66},[56,527,140],{"class":87},[56,529,153],{"class":87},[56,531,84],{"class":83},[56,533,158],{"class":87},[56,535,536,538,541,543,545,547,549,551,553,555],{"class":58,"data-line":131,"line":131},[56,537,95],{"class":94},[56,539,540],{"class":83},"ch1 ",[56,542,202],{"class":62},[56,544,416],{"class":66},[56,546,140],{"class":171},[56,548,421],{"class":62},[56,550,150],{"class":62},[56,552,426],{"class":83},[56,554,429],{"class":269},[56,556,123],{"class":171},[56,558,559,561,564,566,568,570,572,574,576,578],{"class":58,"data-line":161,"line":161},[56,560,95],{"class":94},[56,562,563],{"class":83},"ch2 ",[56,565,202],{"class":62},[56,567,416],{"class":66},[56,569,140],{"class":171},[56,571,421],{"class":62},[56,573,150],{"class":62},[56,575,426],{"class":83},[56,577,429],{"class":269},[56,579,123],{"class":171},[56,581,582],{"class":58,"data-line":174,"line":174},[56,583,74],{"emptyLinePlaceholder":73},[56,585,586,588,590,592,594],{"class":58,"data-line":189,"line":189},[56,587,95],{"class":94},[56,589,540],{"class":83},[56,591,207],{"class":62},[56,593,210],{"class":62},[56,595,596],{"class":269}," 1\n",[56,598,599,601,603,605,607],{"class":58,"data-line":216,"line":216},[56,600,95],{"class":94},[56,602,563],{"class":83},[56,604,207],{"class":62},[56,606,210],{"class":62},[56,608,609],{"class":269}," 2\n",[56,611,612],{"class":58,"data-line":241,"line":241},[56,613,74],{"emptyLinePlaceholder":73},[56,615,616,618,620,622],{"class":58,"data-line":253,"line":253},[56,617,95],{"class":94},[56,619,181],{"class":62},[56,621,84],{"class":83},[56,623,158],{"class":171},[56,625,626,628,630,633,635,637,639,641],{"class":58,"data-line":276,"line":276},[56,627,95],{"class":94},[56,629,196],{"class":62},[56,631,632],{"class":83}," v ",[56,634,202],{"class":62},[56,636,84],{"class":62},[56,638,207],{"class":62},[56,640,210],{"class":62},[56,642,643],{"class":83},"ch1:\n",[56,645,646,648,650,652,654,656,659,662],{"class":58,"data-line":296,"line":296},[56,647,95],{"class":94},[56,649,95],{"class":94},[56,651,225],{"class":83},[56,653,228],{"class":66},[56,655,140],{"class":186},[56,657,658],{"class":98},"\"从 ch1 读取到：\"",[56,660,661],{"class":83},", v",[56,663,123],{"class":186},[56,665,666,668,670,672,674,676,678,680],{"class":58,"data-line":308,"line":308},[56,667,95],{"class":94},[56,669,196],{"class":62},[56,671,632],{"class":83},[56,673,202],{"class":62},[56,675,84],{"class":62},[56,677,207],{"class":62},[56,679,210],{"class":62},[56,681,682],{"class":83},"ch2:\n",[56,684,685,687,689,691,693,695,698,700],{"class":58,"data-line":328,"line":328},[56,686,95],{"class":94},[56,688,95],{"class":94},[56,690,225],{"class":83},[56,692,228],{"class":66},[56,694,140],{"class":186},[56,696,697],{"class":98},"\"从 ch2 读取到：\"",[56,699,661],{"class":83},[56,701,123],{"class":186},[56,703,704,706,708],{"class":58,"data-line":340,"line":340},[56,705,95],{"class":94},[56,707,303],{"class":62},[56,709,273],{"class":83},[56,711,712,714,716,718,720,722,725],{"class":58,"data-line":366,"line":366},[56,713,95],{"class":94},[56,715,95],{"class":94},[56,717,225],{"class":83},[56,719,228],{"class":66},[56,721,140],{"class":186},[56,723,724],{"class":98},"\"都不就绪\"",[56,726,123],{"class":186},[56,728,729,731,733],{"class":58,"data-line":375,"line":375},[56,730,95],{"class":94},[56,732,52],{"class":83},[56,734,337],{"class":171},[56,736,737],{"class":58,"data-line":380,"line":380},[56,738,337],{"class":87},[15,740,741],{},"ch1 和 ch2 都是缓冲通道，且都有值。select 中两个 case 都是 读操作，都满足“就绪态”。",[15,743,744],{},"那么：",[455,746,747,750,753],{},[34,748,749],{},"运行结果有几种可能？",[34,751,752],{},"是否每次都输出一样？",[34,754,755],{},"Go 是怎么决定选哪个 case 的？",[15,757,758],{},"答案：\n都处于就绪态\n会随机选，所以既会输出从 ch1 读取：1 也会从 ch2 读取：2\n不一定一样，不确定",[475,760,762],{"id":761},"请判断程序输出了什么是否稳定并解释理由","请判断程序输出了什么？是否稳定？并解释理由",[47,764,766],{"className":49,"code":765,"language":51,"meta":52,"style":52},"package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\tch := make(chan int)\n\n\tgo func() {\n\t\ttime.Sleep(1 * time.Second)\n\t\tch \u003C- 1\n\t}()\n\n\tselect {\n\tcase v := \u003C-ch:\n\t\tfmt.Println(\"收到:\", v)\n\tcase \u003C-time.After(500 * time.Millisecond):\n\t\tfmt.Println(\"超时退出\")\n\t}\n}\n",[19,767,768,774,778,786,796,806,810,814,828,846,850,867,889,903,916,920,930,948,967,998,1015,1023],{"__ignoreMap":52},[56,769,770,772],{"class":58,"data-line":59,"line":59},[56,771,63],{"class":62},[56,773,67],{"class":66},[56,775,776],{"class":58,"data-line":70,"line":70},[56,777,74],{"emptyLinePlaceholder":73},[56,779,780,782,784],{"class":58,"data-line":77,"line":77},[56,781,80],{"class":62},[56,783,84],{"class":83},[56,785,88],{"class":87},[56,787,788,790,792,794],{"class":58,"data-line":91,"line":91},[56,789,95],{"class":94},[56,791,99],{"class":98},[56,793,102],{"class":66},[56,795,105],{"class":98},[56,797,798,800,802,804],{"class":58,"data-line":108,"line":108},[56,799,95],{"class":94},[56,801,99],{"class":98},[56,803,115],{"class":66},[56,805,105],{"class":98},[56,807,808],{"class":58,"data-line":120,"line":120},[56,809,123],{"class":87},[56,811,812],{"class":58,"data-line":126,"line":126},[56,813,74],{"emptyLinePlaceholder":73},[56,815,816,818,820,822,824,826],{"class":58,"data-line":131,"line":131},[56,817,134],{"class":62},[56,819,395],{"class":66},[56,821,140],{"class":87},[56,823,153],{"class":87},[56,825,84],{"class":83},[56,827,158],{"class":87},[56,829,830,832,834,836,838,840,842,844],{"class":58,"data-line":161,"line":161},[56,831,95],{"class":94},[56,833,411],{"class":83},[56,835,202],{"class":62},[56,837,416],{"class":66},[56,839,140],{"class":171},[56,841,421],{"class":62},[56,843,150],{"class":62},[56,845,123],{"class":171},[56,847,848],{"class":58,"data-line":174,"line":174},[56,849,74],{"emptyLinePlaceholder":73},[56,851,852,854,856,859,861,863,865],{"class":58,"data-line":189,"line":189},[56,853,95],{"class":94},[56,855,51],{"class":62},[56,857,858],{"class":62}," func",[56,860,140],{"class":171},[56,862,153],{"class":171},[56,864,84],{"class":83},[56,866,158],{"class":171},[56,868,869,871,873,875,877,879,881,884,887],{"class":58,"data-line":216,"line":216},[56,870,95],{"class":94},[56,872,95],{"class":94},[56,874,347],{"class":83},[56,876,350],{"class":66},[56,878,140],{"class":186},[56,880,429],{"class":269},[56,882,883],{"class":62}," *",[56,885,886],{"class":83}," time.Second",[56,888,123],{"class":186},[56,890,891,893,895,897,899,901],{"class":58,"data-line":241,"line":241},[56,892,95],{"class":94},[56,894,95],{"class":94},[56,896,411],{"class":83},[56,898,207],{"class":62},[56,900,210],{"class":62},[56,902,596],{"class":269},[56,904,905,907,909,912,914],{"class":58,"data-line":253,"line":253},[56,906,95],{"class":94},[56,908,52],{"class":83},[56,910,911],{"class":171},"}",[56,913,140],{"class":171},[56,915,123],{"class":171},[56,917,918],{"class":58,"data-line":276,"line":276},[56,919,74],{"emptyLinePlaceholder":73},[56,921,922,924,926,928],{"class":58,"data-line":296,"line":296},[56,923,95],{"class":94},[56,925,181],{"class":62},[56,927,84],{"class":83},[56,929,158],{"class":171},[56,931,932,934,936,938,940,942,944,946],{"class":58,"data-line":308,"line":308},[56,933,95],{"class":94},[56,935,196],{"class":62},[56,937,632],{"class":83},[56,939,202],{"class":62},[56,941,84],{"class":62},[56,943,207],{"class":62},[56,945,210],{"class":62},[56,947,213],{"class":83},[56,949,950,952,954,956,958,960,963,965],{"class":58,"data-line":328,"line":328},[56,951,95],{"class":94},[56,953,95],{"class":94},[56,955,225],{"class":83},[56,957,228],{"class":66},[56,959,140],{"class":186},[56,961,962],{"class":98},"\"收到:\"",[56,964,661],{"class":83},[56,966,123],{"class":186},[56,968,969,971,973,975,977,979,981,984,986,989,991,994,996],{"class":58,"data-line":340,"line":340},[56,970,95],{"class":94},[56,972,196],{"class":62},[56,974,84],{"class":62},[56,976,207],{"class":62},[56,978,210],{"class":62},[56,980,347],{"class":83},[56,982,983],{"class":66},"After",[56,985,140],{"class":186},[56,987,988],{"class":269},"500",[56,990,883],{"class":62},[56,992,993],{"class":83}," time.Millisecond",[56,995,153],{"class":186},[56,997,273],{"class":83},[56,999,1000,1002,1004,1006,1008,1010,1013],{"class":58,"data-line":366,"line":366},[56,1001,95],{"class":94},[56,1003,95],{"class":94},[56,1005,225],{"class":83},[56,1007,228],{"class":66},[56,1009,140],{"class":186},[56,1011,1012],{"class":98},"\"超时退出\"",[56,1014,123],{"class":186},[56,1016,1017,1019,1021],{"class":58,"data-line":375,"line":375},[56,1018,95],{"class":94},[56,1020,52],{"class":83},[56,1022,337],{"class":171},[56,1024,1025],{"class":58,"data-line":380,"line":380},[56,1026,337],{"class":87},[15,1028,1029],{},"答案\n超时退出\n每次都一样\n因为 1 秒过后 ch 才进入就绪态，但是 500ms 就已经进入第二个 case 超时退出了",[1031,1032,1033],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJX2D, html code.shiki .sJX2D{--shiki-default:#e36209;--shiki-dark:#ffab70}html pre.shiki code .sqkie, html code.shiki .sqkie{--shiki-default:#5a32a3;--shiki-dark:#b392f0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":52,"searchDepth":91,"depth":91,"links":1035},[1036,1037],{"id":12,"depth":70,"text":13},{"id":473,"depth":70,"text":473,"children":1038},[1039,1040],{"id":477,"depth":77,"text":478},{"id":761,"depth":77,"text":762},[1042],"Go语言","2025-08-05","`select case` 用于监听多个 channel 的就绪状态，只有当对应的读写操作**不阻塞**时才会执行。无缓冲通道需读写同时存在才就绪，有缓冲通道读需有值、写需未满。若多个 case 同时就绪，`select` 会**随机选择一个执行**，否则执行 `default`。配合 `time.After` 可实现超时控制，是并发中的常用模式。",false,"md",null,{"slots":1049},{},"\u002F2025\u002F08\u002Fgo-channel4",{"text":1052,"minutes":1053,"time":1054,"words":1055},"3 min read",2.96,177600,592,{"title":5,"description":1044},{"loc":1050},"posts\u002F2025\u002F08\u002Fgo-channel4",[1060],"channel","tech","dQVppWzqB_iH-_D1gwVLB5O5VkPb9VOMKhYhy-PDRRA",[1064,1069],{"title":1065,"path":1066,"stem":1067,"date":1068,"type":1061,"children":-1},"Go Channel 生产者消费者模型","\u002F2025\u002F08\u002Fgo-channel3","posts\u002F2025\u002F08\u002Fgo-channel3","2025-08-04",{"title":1070,"path":1071,"stem":1072,"date":1073,"type":1061,"children":-1},"使用 Go Channel 实现简易 EventBus","\u002F2025\u002F08\u002Fgo-channel5","posts\u002F2025\u002F08\u002Fgo-channel5","2025-08-07",1786555056480]