Go语言技术文章
-
返回0不表示删除失败,而是说明key不存在;Del操作本身合法且原子,需检查上下文、连接目标和生命周期。426 收藏 -
Go无原生GUI库,需用Fyne或Qt绑定;手写平台原生窗口维护成本高;Fyne适合轻量计算器,关键在状态管理与安全表达式解析,而非界面绘制。426 收藏 -
Go标准库无SkipList实现;手写难点在并发安全与层级生成,container/list是单层双向链表,仅支持O(n)遍历,无法实现跳表的O(logn)多层索引查找。426 收藏 -
Go语言中解析IP和端口应组合使用net.ParseIP与net.SplitHostPort:ParseIP安全解析IPv4/IPv6地址但不处理端口;SplitHostPort正确分离host:port格式字符串,支持带方括号的IPv6,再对host调用ParseIP校验并提取IP。426 收藏 -
本质是连接池混入失效连接,解法是启用checkConnLiveness=true、设合理超时参数、SetConnMaxLifetime=5分钟错开MySQLwait_timeout、仅对driver.ErrBadConn等网络错误重试、禁用事务内自动重试、定期Ping预热并监控Stats。426 收藏 -
不需要安装Go运行时;Go编译默认静态链接,将运行时、GC、调度器和标准库全部打包进二进制文件,生成的可执行文件在匹配的操作系统和架构上可直接运行,仅启用CGO且调用系统C库时才可能引入额外动态依赖。426 收藏 -
在Go中无法直接将[]string类型切片强制转换为[]interface{},必须逐个元素赋值;本文详解原理、提供安全转换方案,并给出实用示例与关键注意事项。426 收藏 -
os.Remove删不掉文件报permissiondenied主因是Windows下文件被占用或权限不足、Linux/macOS下父目录无写权限;它仅删文件或空目录,而os.RemoveAll可递归删除整个目录树。426 收藏 -
不能,Go反射不支持自动类型推导转换;必须显式指定目标类型,否则Convert()或调用方法会panic;安全做法是类型断言处理已知类型,反射仅用于运行时类型不确定的场景如ORM、反序列化。426 收藏 -
通过接口和结构体定义错误类型,结合errors.As和错误包装,可构建可识别的Go错误分类体系。426 收藏 -
os.Open返回*os.PathError的典型场景是打开不存在的路径,此时Err字段为ENOENT、Path字段记录路径;须用errors.Is(err,os.ErrNotExist)而非==判断,以支持错误包装;权限不足用errors.Is(err,os.ErrPermission);检查存在性应优先用os.Stat配合os.IsNotExist/os.IsPermission;os.OpenFile的flag影响错误类型,如os.O_CREATE不创建父目录;跨平台需统一用errors.Is或os425 收藏 -
Go标准库net/http默认不重试,重试需手动实现;gRPC客户端支持声明式重试但需满足三条件;重试必须考虑幂等性、退避策略、上下文超时及系统容量约束。425 收藏 -
Go中防SQL注入唯一靠谱的方式是参数化查询,必须用于所有用户输入的值;结构部分(如ORDERBY、表名)需白名单校验,Scan需严格匹配类型与顺序。425 收藏 -
BurntSushi/toml仅支持读取,无Encode功能;写配置需换用pelletier/go-toml/v2,它支持双向操作、缩进、注释保留等高级特性,且v2与v1及BurntSushi不兼容。425 收藏 -
必须用unsafe.Pointer的场景包括:与C交互(如C.malloc)、底层原子操作、自定义序列化时直接读写结构体字段偏移;需配合Offsetof确认字段位置,禁止对interface{}/map/slice/func转换,uintptr不能长期持有以防悬空指针。425 收藏