-
Go测试无内置setup/teardown机制,需用defer实现单测清理、subtest+外层defer复用初始化、TestMain处理全局逻辑,核心是保持隔离与显式控制。
-
Go语言通过net/http库高效处理HTTP请求,每个请求由独立goroutine处理,支持并发。使用http.HandleFunc注册路由,处理器函数接收ResponseWriter和Request指针,可解析查询参数、表单或JSON数据,需注意错误检查。中间件通过函数包装实现,用于日志、认证等通用逻辑,提升代码复用性。错误处理应使用http.Error或手动设置状态码,避免多次写入header引发panic。关键在于合理组织逻辑、验证输入并及时反馈错误。
-
Go无法直接实现经典备忘录模式,因缺乏访问控制导致封装失效;实际采用非导出memento结构体+包级作用域限制,由Originator提供Save/Restore方法,Caretaker仅存储指针。
-
Go中不用interface{}做观察者事件参数,因其导致运行时panic频发、类型断言失败难定位,根本原因是丢失编译期类型约束;应为每类事件定义具体结构体并统一实现Event接口。
-
需系统级安装Go并配置PATH,重启终端验证goversion;VSCode仅装官方golang.go扩展;配置autoUpdate、空gopath、启用languageServer;dlv失败时手动指定路径。
-
html/template默认转义变量输出以防XSS,需用safeHTML或template.HTML显式声明可信HTML;动态加载需用fsnotify重建template实例;自定义函数须通过FuncMap注册且签名受限;嵌套模板需统一解析或手动合并以共享define。
-
forrange遍历切片/数组得用索引修改原数据,map遍历值为副本且地址复用,字符串按rune遍历并返回字节偏移,channel遍历持续接收至关闭。
-
Golang通过time.Location支持时区转换,使用In()方法实现不同时区转换,具体步骤为:1.获取UTC时间;2.加载目标时区(如Asia/Shanghai);3.使用In()将UTC时间转为目标时区;4.解析带时区的时间字符串需匹配对应布局;5.比较时间建议用Equal()方法确保准确性。处理UTC时间则直接调用UTC()方法即可。
-
Go微服务配置管理核心是运行时可变、环境隔离、变更可控,需用etcdclientv3Watch监听+校验+热加载+降级,禁用viper远程模式,路径前缀实现环境隔离,关键配置须预检与回滚。
-
bufio.NewReader更快是因为用用户态缓冲减少系统调用次数;默认缓冲4096字节,应据实际行长调整,如CSV/JSON行达10KB时建议设为16KB,Scanner遇token过长需同步增大Buffer。
-
责任链模式通过链式处理器解耦请求发送与接收,Go中可定义Handler接口及Request结构体,实现SetNext与Handle方法,构建日志、验证、处理等可插拔环节,请求沿链传递直至被处理或终止,符合开闭原则,需注意nil判断与处理状态管理。
-
本文详解Go中json.Unmarshal引发“invalidmemoryaddressornilpointerdereference”崩溃的根本原因——误调用nil错误值的Error()方法,并提供安全解码、流式解析及WebSocket场景下的最佳实践。
-
签名验证不能只比对hmac.Sum256原始字节数组,因网络传输需base64或hex编码,客户端未编码或编码不一致会导致校验失败;必须统一编码、标准化原文、前置读取Body计算body_hash,再校验签名与时间戳。
-
Go函数参数均为值传递,传值类型改副本不影响原变量,传指针类型可通过解引用修改原内存;结构体依大小和修改需求选传值或指针;切片/map/channel属“假引用”,可改元素但不可扩容;方法接收者依是否修改状态选择值或指针。
-
错误应逐层显式返回,不可忽略或仅打印日志;底层错误可直接返回,建议用%w包装以保留上下文;复杂场景可转换为统一业务错误类型,便于上层通过Code等字段进行重试、降级等处理。