-
Go语言API版本管理需显式实现,推荐URL路径嵌入主版本号(如/v1),辅以子路由器隔离;Accept头仅限内部调用;须通过中间件注入版本上下文;废弃版本应返回410或308,并添加弃用响应头。
-
Go文档注释必须以//开头紧贴声明上方,仅识别导出标识符,且需位于GOROOT/GOPATH或显式-path路径下;跨包引用须用全限定名。
-
Go中len()返回字节长度而非字符数:len("你好")得6,utf8.RuneCountInString()才得2;ASCII字符单字节单rune,中文/emoji等多字节但仅一rune。
-
Go中需用标签跳出多层循环:在外层for前加标签(如outer:),break后跟标签名;标签须紧贴循环、区分大小写、仅函数内有效,否则报错undefinedlabel。
-
net.Dial是Go中建立TCP连接最直接方式,需配置超时、检查错误、正确处理写入与关闭,并解决粘包、半包及假活问题。
-
proto文件第一行必须是syntax="proto3";,且独占一行位于最顶部;go_package决定Go包路径而非package;字段编号不可复用,废弃需reserved;service必须显式定义,rpc参数返回值只能是message。
-
Go1.16+默认启用GO111MODULE=on,goget可拉取GitHub包但需满足规范结构和完整路径;常见错误包括无tag、未在根目录执行、未显式指定版本;国内需设GOPROXY=https://goproxy.cn,direct;import不生效需检查go.mod、路径一致性及导出符号;推荐优先用gomodtidy自动管理依赖。
-
<p>Go编译器要求channel传参必须指定方向:不能将无方向的chanT直接传给只读(<-chanT)或只写(chan<-T)函数,否则报错“cannotusech(typechanint)astype”。</p>
-
Go的select无优先级,是随机公平调度器;多个case就绪时伪随机选择,非按书写顺序或通道优先级。
-
Go的flag包默认不支持位置参数(非flag参数)的usage自动描述;需通过自定义flag.Usage函数,结合flag.PrintDefaults(),才能输出包含必需位置参数说明的完整帮助信息。
-
Go中访问者模式别扭源于无泛型约束与重载,需手动类型断言;应以接口组合+显式Accept实现替代Java式设计,用FuncVisitor简化维护,递归逻辑交由节点控制,并自行处理循环引用。
-
Go1.16+必须用os.CreateTemp替代已弃用并移除的ioutil.TempFile;其参数为dir和pattern(需含""),返回已打开且权限0600的文件,常见错误包括漏写""、重复打开及路径构造不当。
-
正确做法是用带缓冲channel控制并发数、复用http.Client并配置超时与连接池参数,避免资源耗尽;需传参防闭包变量共享,用子context管理超时,90%场景无需替换为fasthttp。
-
需开启innodb_print_all_deadlocks=ON并确保log_error可写,死锁日志仅存于错误日志;Go中需捕获*mysql.MySQLError且Number==1213识别真死锁,避免非确定顺序加锁,结合时间戳、SQL模式与事务日志交叉定位。
-
在Golang项目中实现RPC调用链路追踪的核心方法包括:1.使用OpenTelemetry进行自动埋点,引入相关包和导出器,初始化TracerProvider,并通过otelgrpc中间件为gRPC服务端和客户端自动注入追踪信息;2.手动传递上下文与跨服务透传,在HTTP或gRPC请求头或metadata中携带trace信息,确保上下游服务正确继承trace上下文;3.结合Jaeger或SkyWalking做可视化展示,通过OTLP或对应exporter将trace数据发送至后端系统,从而在UI中查看完