-
sync.Map适合读多写少场景的数据,如配置缓存、连接池元信息、用户会话状态快照;不适合高频增删改的实时聚合类数据。
-
<p>cmux能同时监听gRPC和HTTP,因其在accept阶段通过peek连接前几个字节识别协议指纹:HTTP/1.x以GET/POST开头,gRPC则含PRI*HTTP/2.0或content-type:application/grpc;匹配后路由至对应子服务。</p>
-
net.DialTimeout仅测TCP三次握手延迟,非业务响应延迟,云环境受NAT/SLB/安全组影响大,宜用于healthz探活;真实延迟需用自定义http.Transport+RoundTripper打点,跨地域强制MaxIdleConnsPerHost=1,监控用直方图分桶+histogram_quantile按region聚合。
-
本文介绍如何通过实现json.Marshaler接口,在不修改结构体原始字段值的前提下,优雅地为JSON输出中的字符串字段(如URL)自动添加前缀(如主机地址)。
-
Go的binary.Read不设默认字节序,必须显式传入binary.LittleEndian或binary.BigEndian,否则编译报错;这是为避免网络或硬件通信中因字节序误判导致数据错乱。
-
使用Golang通过rate.Limiter实现全局限流与IP级限流,结合gobreaker断路器进行服务降级,支持动态配置与健康检查,构建高并发下稳定的HTTP服务防护体系。
-
Fiber高性能写法:用ctx.BodyBytes()替代ctx.Body(),ctx.ParamsInt()替代strconv.Atoi(ctx.Params("id")),ctx.JSON()替代json.Marshal,禁用fiber.Logger()以避免I/O拖垮QPS,Prefork仅在多核高并发场景下有效。
-
泛型在编译期实现类型安全的通用代码,反射在运行时处理未知类型,两者可结合用于如标签解析等场景。
-
Go函数使用func定义,需明确参数和返回值类型。例如add(a,bint)int返回两数之和。支持多返回值如divide(a,bfloat64)(float64,bool)返回商和是否成功。可使用命名返回值与裸返回,但应避免降低可读性。
-
GoCLI工具怎么让gorun支持shell补全?不能直接补全——gorun本身不加载你的CLI工具的补全逻辑,它只是临时编译执行。真正要配的是你最终安装后的二进制命令(比如mytool)。常见错误现象:在main.go里调用cobra.GenBashCompletionFile生成了补全脚本,source之后发现按Tab没反应。原因往往是没把生成的脚本路径加进$PATH对应的shell初始化文件,或者没reload。补全脚本必须由已安装的二进制生成
-
应显式构造带超时的*http.Client,避免使用http.Get;正确用url.Values拼接参数并SetHeader;禁用或自定义重定向逻辑;复用连接需配置Transport连接池;务必检查resp.StatusCode和resp.Body。
-
bufio.Reader比os.ReadFile快,因其用4KB缓冲区合并多次read系统调用,减少内核交互;而os.ReadFile对大文件或慢设备易触发上百次系统调用。
-
Go错误无内置级别,需自定义类型或用xerrors/pkg/errors包装,结合errors.Is/As分类;日志分级应由slog.Handler等根据错误类型判断,而非错误自身携带级别字段。
-
在Go语言中,通过typeNewTypeUnderlyingType声明的新类型拥有独立且为空的方法集,即使底层类型已定义方法,新类型也无法直接调用——这是Go类型系统的核心设计原则。
-
Go可变参数通过...语法实现,本质是接收零或多个同类型值并以切片处理;必须为最后一个参数,调用时可用...展开切片,支持与固定参数混合使用。