Go语言技术文章
-
syscall.Mmap单独调用无法实现跨进程共享内存通信,因其仅映射普通文件,内核不保证多进程映射到同一物理页;必须配合shm_open创建POSIX共享内存对象,再mmap映射,才能确保写入对其他进程可见。363 收藏 -
直接用net/http/httputil.NewSingleHostReverseProxy不行,因其仅支持HTTP/1.x,不支持HTTPS后端、gRPC(HTTP/2)、WebSocket及TCP协议,会报“unsupportedprotocolscheme”错误;需按协议分路处理:HTTP/HTTPS用自定义http.Transport,gRPC(h2c)需启用HTTP/2明文支持并单独起http.Server,WebSocket须在Handler中拦截Upgrade:websocket头并透传连接362 收藏 -
漏掉注册是因为未显式导入含init()的包,导致其init()不执行;应显式导入或改用带sync.RWMutex的显式注册函数,并返回接口类型确保抽象。362 收藏 -
Go事务生效关键在于所有操作必须绑定同一*sql.Tx实例,混用db.Exec()会脱离事务立即提交;GORM中需用tx.Create()而非db.Create();Savepoint需手写SQL;推荐使用db.Transaction()自动管理。362 收藏 -
实际生效的依赖版本由golist-mall计算得出,而非go.mod中声明的版本;它基于最小版本选择,可能因其他依赖要求而升级。362 收藏 -
解释 GOGC、heap goal 和分配速率的关系,建立 Go 服务内存预算。362 收藏 -
Golang · Go教程 | 1个月前 | 文件下载 · Go教程 · 审计日志 · 接口安全 · 路径穿越 · Go 文件下载 审计日志 HTTP接口 filepath.Clean 安全下载 路径穿越
Go 文件下载接口不能只把用户传入的 path 直接 Join 后打开。安全做法是固定下载根路径,先做 Clean,再确认最终路径没有越界,同时配合扩展名白名单、大小限制、只读打开和审计记录。362 收藏 -
goroutine泄漏、HTTP客户端未复用、错误处理不落地是并发爬虫三大核心问题:需用信号量或缓冲channel限并发,全局复用并配置http.Client,区分错误类型实现精准重试。361 收藏 -
选择合适注册中心并优化心跳、健康检查与本地缓存,提升服务发现效率及容错能力,结合监控与自动化治理,保障微服务架构稳定运行。361 收藏 -
Kubernetes通过DNS和Service实现Golang服务的服务发现与负载均衡,Golang应用使用服务名即可访问其他服务,无需额外框架;Service基于标签选择器将流量分发至健康Pod,默认轮询策略,配合readinessProbe确保实例可用;建议配置HTTP客户端连接池与重试机制提升稳定性;对于特殊场景如长连接,可使用HeadlessService获取Pod直连IP并自定义负载均衡。360 收藏 -
gotest-cover输出的仅为语句执行粗略百分比,无法定位未覆盖行或分支;可靠覆盖率分析需用-coverprofile生成profile文件并配合gotoolcover查看HTML报告。360 收藏 -
在Go语言中处理网络请求需显式检查错误,首先判断http.Get是否返回err并检查resp.StatusCode≥400;其次设置Client超时避免阻塞,通过自定义Timeout和Transport实现;再通过errors.Is或类型断言区分timeout、连接拒绝等错误类型;最后读取响应体时用io.ReadAll并检查err,确保每一步错误都被捕获处理。360 收藏 -
Go中指针本身不提供并发安全,真正保障安全的是sync包中的同步机制;指针仅用于共享数据结构地址,需配合Mutex、RWMutex或Atomic等正确同步访问。360 收藏 -
%+v打印结构体时指针字段只显示地址而非实际值,因它不自动解引用;需手动解引用、用spew.Dump递归展开或实现Stringer接口定制输出。360 收藏 -
Go文件缓存分内存层(map+sync.RWMutex或第三方库)和HTTP层(ETag/Last-Modified/Cache-Control),协同降低IO压力与带宽消耗;内存缓存适用于中小规模静态文件,需配合过期清理与写时失效。360 收藏