Go|腾讯面经总结

文章目录

用goroutine交替输出abc和123

  • 使用两个无缓冲 channel 来实现 goroutine 之间的交替通知。
  • 一个 channel 控制字母 goroutine,另一个 channel 控制数字 goroutine。
  • 每个 goroutine 在输出前先阻塞等待自己的 channel,输出完成后再向另一个 channel 发送信号,把执行权交给对方。
  • 主 goroutine 先向字母 channel 发送一个初始信号,从而启动整个交替流程。
  • 由于无缓冲 channel 的发送和接收具有同步阻塞特性,所以可以保证两个 goroutine 严格按照 a1b2c3 的顺序输出。
go 复制代码
package main

import (
	"fmt"
	"sync"
)

func main() {
	letters := []rune("abc")
	numbers := []rune("123")

	letterCh := make(chan struct{})
	numberCh := make(chan struct{})

	var wg sync.WaitGroup
	wg.Add(2)

	go func() {
		defer wg.Done()

		for i, ch := range letters {
			<-letterCh
			fmt.Print(string(ch))

			if i < len(numbers) {
				numberCh <- struct{}{}
			}
		}
	}()

	go func() {
		defer wg.Done()

		for i, ch := range numbers {
			<-numberCh
			fmt.Print(string(ch))

			if i+1 < len(letters) {
				letterCh <- struct{}{}
			}
		}
	}()

	letterCh <- struct{}{}

	wg.Wait()
	fmt.Println()
}
相关推荐
铁皮饭盒1 小时前
bun直接tsx,优雅!
javascript·后端
Cosolar2 小时前
藏在 Claude Code 里的极致浪漫:完整 187 条 Spinner Verbs 全收录
后端·程序员·代码规范
Csvn2 小时前
Linux 防火墙管理 — firewalld 实战
后端
Csvn2 小时前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
leeyi3 小时前
Multi-Agent:让多个 AI 分工协作完成复杂任务
后端·aigc·agent
长栎3 小时前
你的策略模式是 Map<String, Strategy>?那不过是最廉价的 if-else 替代品
后端
长栎3 小时前
你写的 abstract class 里全是钩子方法——模板模式不是让你填空,是让你别越界
后端
ping某3 小时前
语法树,到底是一棵什么形状的树?
后端
_柳青杨3 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
Alson_Code3 小时前
人机协作项目文档--HITL-AgentScope
后端·aigc·ai编程