-
Go中nil指针访问panic的本质是底层内存访问违规,不可recover;必须在解引用前显式检查,如ifp!=nil再使用*p或p.Field。341 收藏 -
延迟初始化指将资源初始化推迟到首次使用时,Go中可通过sync.Once或Go1.21的sync.Lazy实现,适用于数据库连接、配置加载等非核心组件,能显著降低启动耗时,提升微服务和Serverless场景下的冷启动性能。341 收藏 -
net.Dial是Go中建立TCP连接最直接方式,需配置超时、检查错误、正确处理写入与关闭,并解决粘包、半包及假活问题。341 收藏 -
NopCloser是Go标准库中用于将任意io.Reader包装为io.ReadCloser的便捷工具,其Close()方法为空实现,适用于无需资源清理的场景。341 收藏 -
应优先调用r.ParseForm()再用r.FormValue("q")获取query参数,避免r.URL.Query().Get()返回空字符串或忽略重复key;上传文件时须显式调r.ParseMultipartForm(32<<20)并设内存限制。340 收藏 -
Go并发查数据库需对齐连接池、查询粒度与上下文控制:设MaxOpenConns≤数据库上限,用QueryRowContext+timeout防连接泄漏,批量操作优先IN而非并发goroutine。340 收藏 -
用reflect.Kind可区分基础类型(如int、string)和复合类型(如struct、slice、map),它只看底层形态,不关心命名;自定义类型Kind与其底层一致,需Type()获取名称和包路径。340 收藏 -
Go切片的capacity并非硬性上限,而是提示底层数组可复用空间的“建议值”;append在容量不足时会自动分配新底层数组并复制数据,因此不会panic,但需显式接收返回值以避免引用失效。340 收藏 -
Go项目应按业务域而非技术层划分package,如用户注册、订单创建等独立业务动作各自成包,interface定义放在调用方,package名与目录严格一致且小写,main包仅负责初始化。340 收藏 -
优化GolangRPC性能需从四方面入手:1.使用连接池和长连接减少TCP开销,结合sync.Pool缓存codec;2.采用Protobuf等高效序列化替代Gob,可集成gRPC提升吞吐;3.设置context超时、限流与熔断机制防雪崩;4.通过异步调用与goroutine池控制并发,避免资源耗尽。配合pprof调优,可支撑数万QPS。340 收藏 -
Go不支持运行时动态定义结构体类型,但可通过reflect动态创建实例、切片或map;推荐用map[string]interface{}处理未知JSON,或用go:generate在构建时生成结构体。340 收藏 -
Go语言中函数参数为值传递,需通过指针修改外部变量;使用&取地址,*解引用,传入变量地址后在函数内操作指针可改变原值,如increment函数使num变为6;结构体同理,updatePerson函数将person改为{Alice30},同时避免大对象复制提升性能。340 收藏 -
<p>Go语言推荐使用单行注释,函数注释需以函数名开头、描述功能,包注释置于package前并用//包裹,导出变量常量应加注释说明用途,通过godoc生成文档,提升代码可读性与维护性。</p>340 收藏 -
Go中返回局部变量指针安全但会逃逸到堆,应避免不必要逃逸以减小GC压力;用gobuild-gcflags="-m"查看逃逸分析,常见触发包括取地址、返回指针、闭包引用等。340 收藏 -
必须用带缓冲的chanerror回传可预期错误,并在每个goroutine内用defer+recover捕获panic转为error发送;chan容量至少为1,避免阻塞导致泄漏。340 收藏