golang
已收录文章:12502篇
-
指针赋值复制的是地址,p1和p2指向同一实例,修改p2.Name会影响p1;需独立副本时应使用*p1解引用赋值或深拷贝。202 收藏
-
Goroutine调度控制对Go并发性能至关重要,因它直接影响CPU利用率和程序响应速度。通过GMP模型,Go将goroutine映射到有限OS线程上,若缺乏控制,易引发过度上下文切换、资源争抢、内存膨胀和调度器饥饿。例如,长时间阻塞操作会阻塞P,导致其他goroutine无法执行;goroutine泄露因无退出机制而累积消耗资源;过度创建goroutine加重调度负担。实践中应避免这些陷阱,采用工作池限制并发数,复用goroutine以减少开销;使用context.Context实现优雅取消与超时控制,190 收藏
-
首先引入prometheus/client_golang库,然后定义并注册计数器和直方图指标,接着通过中间件在HTTP处理中记录请求量和耗时,最后暴露/metrics端点供Prometheus抓取,实现监控数据采集。105 收藏
-
性能测试需分阶段选用合适工具:开发阶段用Benchmark和pprof分析函数性能与资源占用;测试阶段用hey、wrk等压测工具评估吞吐量与响应时间;生产阶段通过Prometheus、Grafana监控系统指标。分析结果时关注ns/op、内存分配、火焰图热点及压测错误率,针对性优化算法、数据结构、并发、缓存与连接池,持续迭代提升程序效率。129 收藏
-
答案:Go编译环境需SDK、编译器等工具将源码编译为二进制文件,运行环境仅需操作系统即可执行静态链接的单一可执行文件;通过交叉编译可在不同平台生成目标二进制,简化部署;编译时依赖GoSDK、第三方模块等,由GoModules管理,运行时依赖极简,通常仅需内核;在Docker中利用多阶段构建,先在完整环境中编译,再将二进制复制到轻量镜像运行,显著减小镜像体积,提升部署效率。500 收藏
-
Golang通过encoding/json包实现JSON处理,核心包括使用json.Marshal和Unmarshal进行序列化与反序列化,利用结构体标签控制字段映射、省略零值及字符串转换,支持自定义类型通过实现Marshaler和Unmarshaler接口,使用Encoder/Decoder处理流式数据,并借助map[string]interface{}和json.RawMessage应对不确定结构,提升灵活性与性能。370 收藏