-
Go结构体方法必须绑定命名类型,未命名类型不可定义方法;需修改字段时必须用指针接收者;嵌套结构体不继承方法,仅匿名字段可提升方法且要求可寻址。398 收藏 -
选Go因goroutine和channel天然适合高并发指标采集与扩缩容;Python受GIL限制,Java则启动慢、内存高;Go以net/http等简洁实现“多源信号→聚合→策略→执行”流水线。398 收藏 -
Go测试中应通过接口隔离实现错误注入:将依赖抽象为接口,测试时用mock返回指定error;避免硬编码错误、panic替代error,注意errors.Is进行包装后error比较。398 收藏 -
Go反射无法直接调用结构体的函数字段,需先通过Field.Interface()获取原生函数再调用;结构体字段不可动态增删,应使用嵌入接口实现行为注入;反射调用方法时需确保receiver可寻址;含func字段的结构体不可序列化,须手动剥离或用DTO传输。398 收藏 -
Facade是一种通过结构体封装多依赖调用、提供简洁接口的设计模式,Go中无需类继承即可实现,核心是降低调用方认知负担,关键在于统一超时、错误处理与依赖注入,避免沦为上帝对象。398 收藏 -
用bufio.Scanner读取一行输入最稳妥,它自动处理换行、缓冲和边界情况,避免fmt.Scanln/Scanf的截断和卡住问题,需检查scanner.Err()并可调Buffer扩容。398 收藏 -
Go1.16起ioutil.WriteFile被弃用,应改用os.WriteFile或os.Create+Write组合;Go1.22+中直接报错undefined,且权限参数受umask影响,大文件易OOM,失败会清空原文件。398 收藏 -
Go中方法绑定到具体类型的值或指针,本质是带显式接收者的函数;值接收者操作副本,指针接收者可修改原值;选择依据包括修改需求、结构体大小及方法集一致性;接口匹配依赖方法集,值类型与指针类型方法集不同。398 收藏 -
Go项目使用Docker需本地安装DockerCLI与daemon,编写多阶段Dockerfile构建静态二进制,用alpine基础镜像并挂载CA证书,通过dockerrun验证端口、环境变量和配置,注意用户权限、信号转发及调试支持。398 收藏 -
用gotest测并发需手动启goroutine并用sync.WaitGroup等待完成,避免time.Sleep;t.Parallel()仅让不同TestXxx函数并行,不控制函数内并发;正确做法是构造可验证副作用、显式同步、隔离共享状态,并配合-race检测竞态。398 收藏 -
必须异步落库,否则同步写库会阻塞WebSocket读协程导致超时断连;应通过带缓冲channel解耦接收与存储,并建(room_id,created_at)联合索引优化查询。398 收藏 -
WaitGroup通过Add、Done、Wait方法实现goroutine同步,主协程调用Add设置任务数,子协程完成时调用Done,主协程Wait阻塞直至所有任务结束,常用于并发请求、批量处理等场景。398 收藏 -
不能直接用bcrypt.GenerateFromPassword而不设成本因子,因其默认值10不适用所有场景:过低易被暴力破解,过高拖慢响应;需按CPU实测调整,新项目建议起始用12,并通过配置项动态管理。398 收藏 -
Go语言通过net/http包原生支持HTTPS和HTTP/2,只需提供合法TLS证书与私钥,调用http.ListenAndServeTLS即可启动安全服务;开发可用自签名证书,生产推荐Let’sEncrypt;需注意证书格式、路径权限、端口配置及重定向设置。398 收藏 -
sliceHeader.Data不等于底层数组首地址,因为它指向当前slice的起始元素地址,而非整个底层数组起点;空切片时Data为0是合法状态,不代表错误;跨goroutine修改Data会导致未定义行为。398 收藏