Go语言技术文章
-
应优先使用gomail而非原生net/smtp:它轻量、不依赖cgo、自动处理STARTTLS和AUTH降级、生成合规MIME/Message-ID,并简化HTML正文与附件添加。443 收藏 -
最轻量角色-权限映射用map[string][]string实现,需加sync.RWMutex保障并发安全,权限字符串统一小写冒号分隔;多角色应从JWT的roles数组提取并合并权限;复杂场景推荐Casbin,注意初始化加载策略、校验签名及token失效机制。465 收藏 -
Go项目数据库迁移审批必须嵌入CI/CD流程:PR强制填写reason/impact/rollback_plan,流水线执行migrateplan预览SQL并触发人工审批,生产环境仅允许带签名工单ID的migrateup,禁用直接down,所有SQL须人工审查语义风险。322 收藏 -
c.Query()返回字符串,参数不存在或为空时均返回"",无法区分未传与显式传空;需用c.GetQuery()判断是否存在,类型转换须手动处理错误。326 收藏 -
最直接安全的Base64编码方式是base64.StdEncoding.EncodeToString(),它将[]byte转为标准Base64字符串(含+/=);解码需处理*base64.CorruptInputError,URL安全场景应使用URLEncoding或RawURLEncoding。373 收藏 -
&v总是指向循环变量副本的栈地址,而非原切片元素;修改*p不影响原数据,因v是独立局部变量,生命周期仅限当轮迭代。108 收藏 -
&v总是指向循环变量副本的栈地址,而非原切片元素;修改*p不影响原数据,因v是独立局部变量,生命周期仅限当轮迭代。193 收藏 -
Go变量分配在栈还是堆取决于编译器逃逸分析,而非语法形式;若变量可能活过当前函数则堆分配,否则栈分配。287 收藏 -
Go中应优先用interface+依赖注入替代硬编码依赖,将数据库、HTTP客户端等抽象为接口并作为参数传入构造函数,便于测试mock和环境切换;工厂函数统一创建复杂对象,策略模式用map[string]func封装算法分支,组合优于嵌套,通过embed接口实现横切逻辑复用。332 收藏 -
Golang应用部署与运维自动化通过容器化、CI/CD、可观测性和IaC实现高效交付;容器化利用多阶段构建和精简镜像提升部署效率与稳定性,CI/CD通过自动化测试、构建、部署及回滚机制确保发布可靠,结合GitLabCI/CD、GitHubActions或ArgoCD等工具实现全流程自动化。479 收藏 -
在Golang中实现RPC超时控制需通过context与select结合,因net/rpc不支持超时,可封装函数用goroutine和channel监听调用结果或ctx.Done()实现;推荐使用gRPC以获得原生上下文传播和更完善的超时控制。232 收藏 -
需在gorm.Config中配置logger.Default.LogMode(logger.Info),仅设LogMode或用Debug()不足;v2必须初始化Logger实例并传入gorm.New,否则无SQL输出。134 收藏 -
Go微服务性能监控需聚焦延迟分布、资源水位、请求健康度三大问题:用HistogramVec按path/method/status打标并设业务适配buckets,避免Summary;运行时指标须用rate观察goroutines趋势,GC次数突增比耗时更早暴露内存泄漏;HTTP状态码需正确捕获,pprof必须限访问、控采样时长。140 收藏 -
查ERC-20代币余额必须调用合约balanceOf方法,不能用BalanceAt;需准备ABI(推荐abigen生成绑定),设置to为代币地址、data为编码后的balanceOf调用数据;用CallContract发起只读调用,注意地址带0x前缀、节点同步状态及合约有效性验证。312 收藏 -
策略模式在Go中通过接口定义统一行为契约、结构体实现具体算法,上下文动态切换策略,支持无状态或带依赖的策略实现。350 收藏