-
Go中int转int64必须显式转换,因类型间无隐式转换;需用int64(x)并确保值在范围内,跨平台时不可依赖int=int64假设,外部输入须检查溢出,字符串解析优先用strconv.ParseInt(s,10,64)。115 收藏 -
syscall在Go中开销高是因为每次调用需用户态到内核态切换、g0栈切换、参数拷贝及信号处理准备;高频小I/O下尤为明显,而bufio缓冲和文件复用可显著优化。211 收藏 -
net.DialTimeout更适合端口扫描因其强制超时保障并发节奏;建议局域网超时设为500ms–2s,避免漏判;需限流并发、及时关闭连接、绕过防火墙干扰,并合理控制goroutine数量(20–50为宜)。293 收藏 -
应使用systemd或supervisord等外部进程管理器实现崩溃自动重启,配合应用内panic安全包裹、依赖服务降级重连机制,构建完整自恢复能力。184 收藏 -
defer在函数返回前按后进先出顺序执行,参数在defer语句执行时即被求值,循环中直接defer调用循环变量会导致所有调用使用最终值。238 收藏 -
本文详解Go语言中判断结构体字段map是否已初始化(即非nil)的方法,并演示如何在JSON解码后自动补全默认空map,避免运行时panic。261 收藏 -
不用rand.Intn因不唯一、不可逆、难扩容;MurmurHash通过确定性哈希+截断+冲突重试平衡可靠性与性能,但仍需DB存储映射并处理碰撞。285 收藏 -
Go测试文件必须与被测代码同目录同包名,命名须为xxx_test.go且含TestXxx或BenchmarkXxx函数;集成测试应隔离并用构建标签控制;表格测试需显式捕获循环变量避免闭包陷阱。137 收藏 -
GOGC环境变量到底控制什么GOGC不是内存上限,而是触发GC的“增长比例阈值”。默认值100表示:当堆内存从上一次GC完成后增长了100%(即翻倍),就启动下一轮GC。常见错误现象:GOGC=10后RSS内存反而飙升、GC频次高但heap_inuse没降下来——这往往是因为GC太激进,频繁停顿却没腾出多少有效空间,尤其在对象生命周期长、大量中间态缓存的场景下更明显。值设得太低(如10):GC频繁,STW时间总和上升,CPU花在GC上的比例可能超2345 收藏 -
Go中参数均为值传递,传指针实为传指针副本,故函数内重赋指针值不影响外部;修改指向内容需*p=newVal,改指针本身需**int或返回新指针。336 收藏 -
bufio.Scanner逐行读取文件最常用且安全,但超长行、二进制内容或需错误定位时不适用;默认单行上限64KB,超限报ErrTooLong,调试困难;支持超长行需调用scanner.Buffer()。231 收藏 -
让新结构体满足旧interface的关键是通过适配器模式精准转发调用,不篡改语义、不新增逻辑,严格遵循方法集规则和接收器类型匹配,并避免导出内部字段以维护封装性。149 收藏 -
pprof默认暴露在/debug/pprof且无鉴权,导入net/http/pprof即自动注册全部调试接口,生产环境必须隔离至独立端口(如127.0.0.1:6060)并加基础认证,禁用公网访问。138 收藏 -
Go中无法通过指针修改常量,根本原因是OS内存保护机制将只读数据段(如.rodata)设为PROT_READ,写操作触发SIGSEGV;const是编译期概念,不占运行时内存槽位,真正可修改的是var声明的变量。383 收藏 -
Go用带缓冲channel(如make(chanstring,10))可构建轻量级内存消息队列,天然并发安全,适合开发调试等可丢消息场景;服务重启消息即丢失,缓冲大小需权衡内存与背压。469 收藏