-
在Golang中,sync.Mutex和sync.RWMutex用于解决并发访问共享资源时的数据竞争问题,1.sync.Mutex是互斥锁,同一时间只允许一个goroutine访问临界区,适用于读写频率相近或写较多的场景,典型应用包括保护共享变量、结构体字段和配合sync.Once进行一次性初始化;2.sync.RWMutex是读写锁,允许多个读操作并发执行但写操作独占,适用于读远多于写的场景如配置管理、缓存系统和状态监控,能显著提升并发性能;3.选择时应根据读写比例决定,读写接近用Mutex,读远多于写
-
sync.Map适用于小流量、单机、QPS几百的幂等场景,但无自动过期、不跨进程;需用结构体缓存结果、定时清理、避免key污染,Redis需原子SetNX+EX,DB唯一索引为兜底。
-
Example函数必须以Example开头且无参数:命名须为funcExampleXXX(),放于_test.go中同包,用fmt.Println打印输出,运行用gotest-run^Example,文档通过godoc或pkg.go.dev查看。
-
Gio是即时模式2D渲染库,非传统GUI框架;黑屏主因是漏掉op.InvalidateOp{}.Add(ops)或未调用gtx.Layout();输入需手动注册pointer.InputOp/key.InputOp并拉取事件;widget.Clickable适合简单点击,复杂交互须用底层pointer.InputOp。
-
goroutine中panic无法被外层defer捕获,必须在每个goroutine内部用deferrecover()处理;errgroup.Group可安全统一管理多goroutine错误;channel发送错误需避免关闭后发送或死锁。
-
使用os.CreateTemp可安全创建唯一临时文件,需指定目录和带*的模式名,通过defer清理资源,并设置适当权限以确保安全性和稳定性。
-
os.MkdirAll可一次性创建多级目录且自动处理父目录缺失,接收路径字符串和os.FileMode权限(如0755),成功返回nil(含路径已存在情况),失败返回具体错误;推荐用filepath.Join构建跨平台路径并显式指定权限,务必检查错误。
-
用map+sync.RWMutex可实现轻量级线程安全服务注册发现:定义Registry结构体封装带读写锁的map,注册需加写锁查重并更新心跳,发现用读锁;后台goroutine通过ticker定期清理超时实例;HTTP接口需规范方法、JSON解析与错误处理;客户端用非阻塞心跳机制并设超时重试。
-
通过一个后端服务调用第三方接口的案例,演示 Go context.WithTimeout、defer cancel、HTTP 请求取消、错误判断和常见坑,避免接口一直等待。
-
containerd的CRI接口不能直接用client.NewClient,因其调用的是containerd自有API而非Kubernetes定义的CRI协议;CRI需通过k8s.io/cri-api生成gRPCclient连接CRIendpoint(如/run/containerd/containerd.sock),使用insecurecredentials和WithBlock,并确保版本与集群一致。
-
select用于多通道选择,监听多个通道操作,任一就绪即执行,支持随机公平选择、default非阻塞和time.After超时控制,常用于多路监听、超时处理与协程协调。
-
使用json.Marshal与os.WriteFile可快速写入小数据,json.Encoder适合大对象流式写入,结合MarshalIndent可格式化输出,map或slice同理处理。
-
使用bufio可显著提升Go文件I/O性能,通过缓冲减少系统调用。创建带缓冲的读写器避免频繁内核交互,读取推荐bufio.Scanner,写入后必须调用Flush()确保数据落盘。默认缓冲4096字节,可根据文件大小调整至64KB~1MB以优化吞吐。将*os.File、网络流等统一视为io.Reader/io.Writer接口,提升代码复用性。结合defer确保资源释放与缓冲刷新,防止数据丢失。合理设置缓冲区大小并遵循接口设计原则,能有效提高程序效率。
-
gomodvendor默认不生效,需确保GO111MODULE=on且项目根目录存在go.mod;它仅复制go.mod中require的依赖到vendor/,构建时须显式启用-mod=vendor才使用vendor内容。
-
直接用golang.org/x/time/rate,它基于线程安全的tokenbucket,经高并发验证,且与主流框架天然兼容;自行实现易出并发问题。