-
无缓冲channel一发就卡住是设计使然;需根据是否需要强制双方步调一致来选择有/无缓冲,而非是否阻塞。301 收藏 -
因为net.Listen("tcp",addr)不支持SO_REUSEPORT,无法让多进程共享同一端口;单进程内靠goroutine轮询仍是单点accept,无法实现内核级连接分发与多核负载均衡。301 收藏 -
不能直接用BenchmarkXxx测数据库操作,因连接建立、驱动初始化等干扰会导致结果失真;必须外部初始化sql.DB、预热连接池、复用Stmt、显式设置连接池参数,并仅将SQL执行放入b.N循环。301 收藏 -
使用Golang实现用户认证需定义User结构体并用map模拟存储;2.通过bcrypt哈希密码保障安全;3.利用JWT生成带签名的令牌用于身份验证;4.提供注册登录接口完成用户管理;5.设计中间件校验JWT以保护受限制路由。301 收藏 -
协程不能直接用于for循环迭代,因其返回coroutine对象而非可迭代对象;必须使用asyncfor配合异步迭代器或异步生成器(asyncdef+yield)才能实现逐项await式遍历。301 收藏 -
方法接收者用T还是T取决于是否需修改原值:只读用T,修改必用T;结构体大时T可减拷贝开销;混用导致方法集不一致;sync.Mutex等状态类型必须用T且禁止复制。301 收藏 -
把一次请求拆成入口、并发扇出、下游调用、取消和收尾几个阶段,建立并发治理的全局视角。301 收藏 -
embed读取静态文件为什么比os.ReadFile快因为embed.FS在编译期就把文件内容塞进二进制,运行时直接从内存取,跳过了磁盘I/O和系统调用开销。而os.ReadFile每次都走syscall、路径解析、权限检查、内核页缓存竞争,尤其在高并发下容易成为瓶颈。实操建议:只对真正不变的资源(如HTML模板、CSS/JS、图标)用embed;动态生成或需热更新的文件别硬塞进去//go:embed注释必须紧贴变量声明前一行,中间不能有空行或注释,否则嵌入失败且无提300 收藏 -
Mutex用于保护共享状态,适合多goroutine读写同一变量时的同步;Channel用于goroutine间通信,适合数据传递与任务协调。300 收藏 -
Go字符串底层是UTF-8编码的只读字节序列,len(s)返回字节数而非字符数;中文占3字节、emoji如“?”占4字节;遍历应使用range获取rune,避免用索引截取或手动拼接非法UTF-8。300 收藏 -
Go官方plugin包仅支持Linux/macOS,Windows不支持;要求主程序与插件完全相同的Go版本和构建参数;插件须通过共享接口交互,无法热重载,且需显式调用导出初始化函数。300 收藏 -
Go中len()返回字节长度而非字符数:len("你好")得6,utf8.RuneCountInString()才得2;ASCII字符单字节单rune,中文/emoji等多字节但仅一rune。300 收藏 -
sync/atomic.Value仅支持可复制类型,存指针/map/slice等会导致未定义行为;必须类型一致、避免并发修改共享内存;Load返回副本,修改不影响原值;适用于读多写少的全量替换场景。300 收藏 -
指针在Go语言中可以作为map的键,但其比较基于地址而非值。1.指针类型是可比较的,只要它们指向的地址不同,即使值相同也会被视为不同的键;2.若需根据内容判断,应使用结构体本身或提取字段组合成键;3.nil指针可作为键,所有nil指针会被视为相同键。使用时需注意隐晦问题,避免误用导致逻辑错误。300 收藏 -
使用http.FileServer提供静态文件服务时,必须显式指定安全根目录(如http.Dir("/path/to/uploads")),禁用路径遍历,并通过中间件校验URL路径;文件上传需另写POSThandler,调用r.ParseMultipartForm解析multipart/form-data。300 收藏