-
v是副本而非引用,修改v不影响原切片;改原切片须用索引s[i];结构体切片中v.Field=x无效;map遍历顺序随机,需显式排序key;并发读写map会panic;string遍历中i是字节偏移而非字符序号。
-
Gochannel的行为由hchan结构体的五个核心字段决定:buf、dataqsiz、sendx、recvx、qcount;它们共同实现逻辑环形缓冲区,其中qcount精确反映元素个数,sendx/recvx为模运算游标,判空满均依赖qcount,无缓冲时dataqsiz=0且buf=nil。
-
答案:在Golang的RPC开发中,gRPC通过status.Code和status.Error实现标准化错误传递,服务端使用codes.InvalidArgument、NotFound等状态码返回错误,客户端通过status.FromError解析具体错误类型,避免字符串比较;还可通过errdetails附加结构化信息如字段校验失败详情,提升错误处理的可靠性和调试能力。
-
用gobuild-gcflags="-m=2"查看输出,出现“caninline”或“inliningcallto”即成功内联;若含“cannotinline”及原因(如defer、闭包、递归等),则失败;跨包调用默认不内联,//go:inline仅对非接口方法有效且须紧贴声明。
-
select分支执行顺序是伪随机轮询而非随机或按代码顺序;当多个case就绪时,Go以per-Goroutine伪随机起始索引轮询,防饿死但不可预测;default优先级最高,仅有一个case就绪则直接执行,全阻塞则goroutine挂起。
-
测试多线程函数需解决执行顺序不可控、资源竞争和测试提前结束问题,应使用sync.WaitGroup或channel确保所有goroutine完成。
-
gomobile不是UI框架,仅将Go函数编译为AndroidAAR或iOSFramework供原生调用;必须指定合法module路径(不支持.),Android需main包含main函数,iOS需//export注释导出函数。
-
以慢接口排查为线索,讲 Go pprof 的 CPU、heap、goroutine、block profile 使用顺序和常见误判。
-
直接测handler函数时用httptest.NewRecorder;需完整HTTP生命周期(如重定向、中间件、TLS)才用httptest.NewServer。前者轻量快速,适合90%单元测试;后者启真实服务,易致端口冲突、变慢,属集成测试范畴。
-
Gomap迭代不按插入顺序是设计使然,旨在防止依赖顺序;其底层从随机bucket和cell开始遍历,每次range起点由运行时动态生成;需有序遍历时应先提取key切片并排序。
-
直接用Eval容易出错,因go-redis的Eval要求*redis.Script实例而非字符串,且keys和args必须严格分离为[]string和interface{}切片,否则导致类型错误、越界或脚本内无法访问参数。
-
Go语言通过反射可动态获取结构体方法,核心是使用reflect.TypeOf获取类型对象,再调用NumMethod和Method遍历方法;需注意值接收者与指针接收者差异:值类型只能访问值接收者方法,而指针类型可访问两者;通过reflect.Method可获取方法名、类型签名及函数值,进而实现动态调用。
-
值类型直接存储数据,变量间相互独立;指针类型存储地址,可共享和修改同一内存数据。
-
GoHTTP服务器需显式创建ServeMux、校验Method/Content-Type、配置超时、包装ResponseWriter以实现可观察性与可靠性。