-
用http.ListenAndServe启动服务端口被占会静默失败,应显式构造http.Server实例捕获并打印底层错误;默认Handler为nil时使用http.DefaultServeMux,但推荐显式创建http.ServeMux提升可控性与可测试性。382 收藏 -
Gosort包不支持自动推断类型排序,需用sort.Ints/sort.Strings等专用函数排基础类型,或实现sort.Interface接口排自定义类型;所有排序原地进行、稳定、时间复杂度O(nlogn)。265 收藏 -
Go的yaml.v2库要求结构体字段必须导出(首字母大写)且通过yaml标签显式映射,否则无法访问字段,导致反序列化后结构体为空。本文详解原因、修复方法及最佳实践。431 收藏 -
Go语言中虽允许将方法接收者命名为this,但违背官方代码规范,且易引发语义混淆——因Go的接收者可为值或指针,而this暗示“当前对象指针”,与语言设计哲学相悖。113 收藏 -
Go中遍历结构体字段需用reflect包,仅支持导出字段:用reflect.TypeOf获取类型,NumField()和Field(i)遍历,field.Name、field.Type、field.Tag分别获取字段名、类型、标签;非导出字段被忽略。358 收藏 -
Go中实现客户端负载均衡的RoundRobin策略需维护服务实例列表并原子递增索引取模选择节点,配合sync.RWMutex保护动态更新、健康检查与故障剔除机制。239 收藏 -
Go中if的短变量声明(:=)作用域仅限该if及其else分支内;需复用时应提至外部用=赋值;初始化语句不可有副作用;elseif可各自声明同名变量;短声明仅支持单个变量绑定,多值返回需先整体接收再取值。420 收藏 -
Go不支持真正意义上的“多维数组式”map语法,但可通过嵌套map类型(如map[string]map[string]string)实现类似二维结构,需显式初始化每一层子映射,否则直接赋值会引发panic。125 收藏 -
Go不支持多层包依赖管理,gomod仅解析直接与间接依赖;indirect模块是正常现象,反映实际引用路径;可用replace/exclude锁定子依赖版本,go.sum缺失需补全校验和。422 收藏 -
Go通过结构体嵌套与组合实现代码复用,支持匿名嵌套提升字段和方法,可模拟继承与方法重写,适用于多层结构设计及功能扩展。315 收藏 -
结构体指针初始化有三种合法方式:&Struct{}(推荐,可初始化字段)、new(Struct)(返回全零值指针)、先声明变量再取地址(适用于需复用变量名或多次修改场景);不可取字面量地址。229 收藏 -
应统一将参数转为[]reflect.Value再调用Call,严格匹配函数签名;变参需逐个ValueOf;返回值需检查数量与类型,错误需Interface()转换;高频调用应缓存reflect.Value。493 收藏 -
使用互斥锁、独立文件或channel可安全处理Go并发文件读写。1.用sync.Mutex串行化对同一文件的访问,防止数据竞争;2.每个goroutine写入独立文件(如按ID命名),避免共享资源冲突;3.通过channel将写请求集中由单一goroutine处理,实现生产者-消费者模型;4.配合sync.WaitGroup确保所有写操作完成后再退出,防止资源泄漏。根据场景选择:简单用Mutex,高并发选channel,独立输出各自写文件。313 收藏 -
应使用%+v展开错误链(需错误类型实现fmt.Formatter),%v仅显示顶层消息,%s强制调用Error();打印前须判err!=nil,避免输出<nil>。130 收藏 -
flag.Parse()必须在所有flag.*定义之后调用,否则后续flag不会被解析;短选项需手动注册;位置参数用flag.Args()获取;自定义类型需实现flag.Value接口。377 收藏