-
GoHTTP服务启动需注意监听地址、错误处理和超时配置:ListenAndServe默认绑定所有网卡,空addr非仅localhost;Serve更可控,支持自定义Server参数;常见失败因端口占用、panic未捕获或hosts配置异常。
-
httptest.NewServer用于集成测试真实HTTP服务,启动本地临时服务并返回可请求的*httptest.Server实例;httptest.NewRecorder用于单元测试单个handler,绕过网络栈直接捕获响应细节。
-
goroutine阻塞主因是channel使用不当或select缺少default分支,导致死锁;无缓冲channel发送时若无接收方会永久阻塞,引发“allgoroutinesareasleep”错误。
-
用graphql-go启动GraphQL服务需三步:手写schema、实现Resolve函数、用http.HandlerFunc封装graphql.Do;须检查result.Errors而非直接序列化;依赖通过p.Info.RootValue透传,不可全局存储;不支持订阅因无WebSocket实现。
-
分片上传需严格管理uploadId和partNumber:uploadId须初始化获取并妥善保存,partNumber必须从1开始连续递增;分片大小建议固定5MB以上;并发上传需用file.Seek定位+io.LimitReader避免指针混乱;断点续传依赖ListParts查询已传分片;CompleteMultipartUpload必须按partNumber升序提交服务端返回的ETag,否则报错。
-
Go程序健康检查必须由程序自身提供轻量HTTP端点(如/health),HEALTHCHECK应使用curl探测而非进程检查,且需正确配置--start-period、--timeout及||exit1。
-
Go中函数可作为参数传递,需严格匹配完整函数类型签名,推荐用类型别名统一定义,避免跨包不兼容;传参用函数名不加括号,调用前应判空,闭包捕获指针才影响外部变量。
-
gofpdf是Go中生成基础PDF最快上手且最稳定的选择,纯Go实现、无系统依赖、交叉编译友好,适合报表、票据等轻量需求;需注意权限、单位参数、中文字体注册、内容宽度控制及输出校验。
-
Go环境搭建需配置GOROOT、GOPATH、GOBIN和PATH;GOROOT为Go安装路径,如/usr/local/go;GOPATH为工作区,默认$HOME/go,存放源码与包;GOBIN指定goinstall输出目录,优先于GOPATH/bin;PATH需包含GOROOT/bin和GOPATH/bin以运行go命令及工具。
-
根本原因是未做链级隔离的超时控制、未统一错误分类、未处理JSON-RPC响应结构差异;需为每条链单独设context.WithTimeout、独立http.ClientTransport、用json.RawMessage分支解析并保留原始error与statuscode。
-
Go中错误变量不宜全局存放,因丢失调用栈和上下文信息,难以定位问题;推荐用自定义错误类型和构造函数替代,以支持上下文携带、类型判断与分层处理。
-
最可靠判断结构体的方式是reflect.TypeOf(v).Kind()==reflect.Struct,需先解引用指针、检查接口有效性,并避免在热路径滥用反射。
-
Go语言通过内置testing包实现单元测试,示例中为calculator模块的Add和Multiply函数编写测试,测试文件以_test.go结尾,使用Test函数和t.Errorf验证结果,推荐用表驱动测试(t.Run)管理多用例,通过gotest运行测试,gotest-coverprofile结合gotoolcover可查看覆盖率,绿色为已覆盖,红色为未覆盖,提升代码可靠性。
-
Go函数返回多个值时error必须放在最后,以便iferr!=nil快速判断、配合:=声明且避免解构混乱;需显式检查不可忽略,推荐早返回而非defer或panic处理业务错误。
-
新项目应选cobra而非原生flag;flag仅适用于单命令极简脚本,cobra提供命令树、自动help、bash补全等完整CLI支持,且通过PersistentFlags与Flags合理划分作用域,避免参数丢失。