-
HTTP请求失败需同时检查resp和err:err非nil表示网络层错误,resp.StatusCode非2xx表示服务端错误;超时应优先用context.WithTimeout;重试须区分幂等性,仅对5xx或网络超时等错误进行指数退避。
-
自建Gomodule代理服务端是企业内网必需,Athens是最成熟实现;启动前须配置AUTH_TOKEN、ATHENS_DISK_STORAGE_ROOT权限和ATHENS_GO_BINARY_PATH。
-
Go协程栈溢出时panic信息长什么样遇到runtime:goroutinestackexceeds1glimit或fatalerror:stackoverflow就是协程栈爆了。这不是传统C的栈溢出信号,而是Go运行时主动检测到当前goroutine的栈空间(默认上限1GB)被耗尽后抛出的panic。注意:它不一定是递归太深,也可能是大量局部变量+多层调用累积占满栈。典型触发场景:funcf(){f()}无限递归、深度JSON解析嵌
-
RPC方法签名无法直接校验参数,需提前拦截;Go标准net/rpc强制方法签名为func(Args,Reply)error,仅保证调用成功(序列化、网络、panic),不校验业务参数合法性。
-
能,但只限制后续新连接,已有连接不受影响且不会主动回收;需配合SetMaxIdleConns、SetConnMaxLifetime等参数协同调优,避免OOM或超时。
-
使用bufio包可提升Go语言文件读写性能。通过bufio.Reader减少系统调用,实现高效按行或字节读取;利用bufio.Writer缓冲数据,降低磁盘I/O次数,需调用Flush确保数据写入;组合Reader和Writer可高效完成文件复制,控制内存使用且提升速度。
-
Go的encoding/json包仅序列化导出(首字母大写)字段;嵌入结构体若无导出字段,将生成空JSON对象{}。
-
复数字面量写法不对,cmplx函数根本不会被调用Go里没有内置复数类型字面量语法(比如Python的3+4j),必须显式用complex64或complex128构造。写成3+4i会直接编译报错:undefined:i。正确写法只有两种:complex(3,4)(生成complex128)或complex64(complex(3,4))。别试图用字符串拼接或float转换,cmplx包所有函数只认这两个底层类型。cmplx.Sqrt对complex64
-
fmt.Sprintf返回空字符串是因为动词与参数类型不匹配,如%d格式化字符串或%s格式化整数,Go不做隐式转换,导致结果为空而非panic。
-
Go查Linux文件系统配额最稳妥方式是调用quota命令行工具:如quota-u-f/homeusername查用户配额,quota-g-f/homegroupname查组配额;推荐加-p参数获取制表符分隔的POSIX格式输出,避免空格解析错误,注意处理字段为-(未启用)及block单位为KB等细节。
-
Go中slice传参不拷贝底层数组,只拷贝头部结构(len/cap/ptr),故修改元素(如s[0]=x)影响原slice;但append、make、重赋值等操作仅改变局部头部,需返回并显式接收才能更新调用方变量。
-
filepath.Walk是遍历源码目录最稳方案,自动处理符号链接、权限错误和深度限制;应过滤非普通文件、用filepath.Base配合字符串判断Go文件、跳过测试/生成文件;逐行扫描时需跟踪多行注释状态并剔除空行和注释行;统计标准需明确定义以避免结果偏差。
-
bufio.Reader比os.ReadFile快,因其用4KB缓冲区合并多次read系统调用,减少内核交互;而os.ReadFile对大文件或慢设备易触发上百次系统调用。
-
Go语言for是唯一循环结构,支持三段式、条件式和无限循环三种语义;三段式需分号分隔,初始化变量作用域限于for块内,条件在每次迭代前判断,后置语句在循环体后执行。
-
mgo库不会缓存传入mgo.Dial()的连接字符串;所谓“连接旧库”实为代码中其他位置(如session.DB())硬编码了旧数据库名,而非连接字符串被缓存或复用。