-
用docker-go连不上本地DockerDaemon时需显式指定host,Linux用unix:///var/run/docker.sock,Mac用unix:///Users/$USER/.docker/run/docker.sock,WSL2用tcp://localhost:2375并开启DockerDesktop相应设置。
-
在Go中定义返回时间的函数时,应直接返回time.Time类型而非字符串——这既符合类型安全原则,又能完整保留时间的语义能力(如比较、加减、格式化等),便于后续调用方灵活使用。
-
Go语言中,interface{}与反射结合可在运行时处理任意类型。通过reflect.ValueOf和TypeOf获取类型与值信息,利用Elem()解指针并调用Set修改数据;遍历结构体字段读取标签实现序列化等通用逻辑;通过MethodByName动态调用方法,支持插件式设计。示例包括修改指针指向值、解析structtag及调用导出方法。需注意仅导出字段和方法可被反射操作,且应避免滥用以减少性能开销和维护难度。
-
interface{}会让变量逃逸到堆上,因编译器无法确定底层类型大小和生命周期,保守地将原值复制到堆;常见于传给fmt.Println、json.Marshal等接受interface{}的函数。
-
Go中不能直接用reflect.Method调用结构体方法,因其仅为元信息;须通过reflect.Value.MethodByName()获取可调用的reflect.Value后调用Call(),且仅支持导出方法和可寻址接收者。
-
用time.Truncate(24*time.Hour)最快获取本地时区今日零点,如需指定时区(如Asia/Shanghai)则先In()再Truncate;切勿缓存零点值,应每次实时计算或封装函数。
-
单调栈典型写法是用切片模拟:入栈前弹出破坏单调性的元素,栈顶为切片末尾;升序栈遇更小值持续pop,降序栈遇更大值持续pop;栈中存下标便于计算距离;切片比container/list快3–5倍因连续内存访问。
-
JSON解码失败时,json.Unmarshal统一返回json.UnmarshalTypeError或json.SyntaxError,最常见的是json.UnmarshalTypeError;字段缺失本身不报错,需手动校验。
-
gotoolpprof导出火焰图需用-raw-lines参数生成折叠栈格式:gotoolpprof-raw-lines./myappcpu.pprof>stacks.txt;必须禁用strip,确保符号完整;再用flamegraph.pl渲染为SVG。
-
Go中iferr!=nil是核心控制流而非语法糖,需显式处理每个错误分支;避免err变量覆盖、缩进嵌套和字符串匹配错误;用errors.Is/As判断错误类型;panic仅用于真正不可恢复的初始化失败等场景。
-
http.Post默认不设Content-Type,JSON会被当text/plain导致415错误;须用http.NewRequest+Do并设application/json;json.Marshal错误不可忽略;结构体需jsontag;禁用手写JSON字符串;必须显式设超时。
-
crypto/rand.Read是Go中生成密码学安全随机字节的唯一正确方式,必须传入已分配长度的切片、检查error、避免模偏差,并使用拒绝采样或rand.Int生成安全整数;严禁使用math/rand或错误包装rand.Reader。
-
使用httptest和接口打桩可高效测试Go的HTTP客户端。首先通过net/http/httptest创建模拟服务器,验证请求响应逻辑;其次定义HTTPClient接口并实现Mock对象,隔离测试业务逻辑;最后利用延迟和超时设置覆盖异常场景。1.启动httptest.Server模拟API返回JSON;2.注入MockHTTPClient拦截Do方法;3.设置客户端超时验证错误处理。这种方式无需真实网络调用,即可全面测试成功、失败及边界情况,提升代码可靠性。
-
命名返回值使函数签名模糊,因返回名仅为隐式局部变量,不参与接口匹配;裸return易致零值错误,仅适用于短小线性函数如错误统一处理场景。
-
使用gvm或手动方式可高效管理Linux下多Go版本。1.gvm支持安装、切换和设默认版本,如gvminstall/usego1.21;2.手动解压不同版本至独立目录,并通过函数切换GOROOT和PATH;3.执行goversion验证当前版本;4.注意依赖安装与PATH冲突,IDE需重载配置。gvm适合开发,手动适合生产。