-
Go1.18+泛型函数需用funcName[Tany](xT)T语法,T在方括号声明、圆括号使用;any等价interface{}但语义更清,严格约束需自定义接口;map[string]T不可作约束因非接口类型,应改用接口约束或interface{}+断言。
-
gobuild-gcflags="-m-m"是查看Go逃逸分析结果的唯一可靠方式,双-m展开至变量级,输出如“escapestoheap”等明确判断,需配合grep"escape"过滤,且必须实测而非依赖IDE。
-
单元测试只测函数逻辑、隔离外部依赖,集成测试连真实依赖但需可控可销毁;二者通过构建标签//go:buildintegration严格分离,子测试t.Run组织多场景用例并确保独立性。
-
Go安装后需验证GOROOT、GOPATH及gorunhello.go三步闭环;Go1.16+默认启用模块模式,GOPATH仅影响goinstall路径,建议接受默认值并将其bin目录加入PATH,避免项目置于GOPATH/src下。
-
time.Duration底层是int64纳秒,不可直接当数字运算;乘系数须用整数或显式float64转换;ParseDuration仅支持毫秒级精度;测时应优先用time.Since()而非UnixNano()差值;JSON/HTTP中推荐用String()序列化。
-
反射调用func(...interface{})类型函数时panic:wrongtypeforvariadicargumentGo反射调用变长参数函数最常卡在这儿:你把[]interface{}直接塞进reflect.Call(),结果报错wrongtypeforvariadicargument。这不是类型写错了,是反射不认“切片当可变参数”这个语法糖——它需要你手动拆包。实操建议:别传[]interface{}整体,得用...展开:把切片转成[]ref
-
Go语言要求显式类型转换,基本类型间需强制转换,如int转float64;[]byte与string可互转;接口类型通过x.(T)断言获取具体类型,推荐使用v,ok:=x.(T)避免panic;多类型判断可用typeswitch提升可读性;自定义类型建议实现ToXXX/FromXXX方法增强维护性;处理interface{}时务必结合ok判断确保安全。
-
Go的http.Client默认不重试,需手动实现带指数退避的重试逻辑;必须检查err!=nil,因网络错误(如timeout、connectionrefused)导致resp为nil,直接访问StatusCode会panic;可重试判断应基于net.Error.Temporary()或context.DeadlineExceeded。
-
goinstall要求源码必须位于GOPATH/src的标准包路径下(如myproject/cmd/hello),且需以包名形式调用(如goinstallmyproject/cmd/hello),不能直接对.go文件执行;否则会因GOBIN未设或路径不规范报错。
-
答案:通过reflect.TypeOf获取结构体类型,遍历NumMethod和Method可列出所有公开方法。示例中定义User结构体及SayHello、SetName等方法,使用printMethodList函数输出方法名、类型及是否导出信息,支持传入值或指针;callMethod函数通过MethodByName查找并动态调用方法,需注意仅能访问大写字母开头的导出方法,且指针方法要求接收者可寻址;反射性能较低,适用于插件系统、依赖注入等场景,但应避免高频使用。
-
Go通过返回error接口处理错误,使用errors.New和fmt.Errorf创建错误;2.用errors.Is和errors.As判断和解析错误类型;3.可自定义错误结构体实现Error方法以携带上下文。
-
Go程序在Windows上通过gorun启动耗时长达4–5秒,主因是Go1.5+编译器全面转为Go语言实现后初期未充分优化,叠加Windows原生异步I/O(如I/OCompletionPorts)支持不足,导致构建和启动链路性能下降。
-
Go写RESTfulAPI应避免照搬其他语言习惯:不用嵌套ServeMux,只用一个顶层mux;struct字段须首字母大写并正确加jsontag;POST/PUT中必须deferr.Body.Close()防泄漏。
-
Go安装后需手动将C:\Go\bin加入$env:PATH用户变量,新开PowerShell窗口后用where.exego验证路径及可执行性,避免架构不匹配或杀毒软件拦截。
-
Go读CSV中文乱码因标准库仅支持UTF-8,需用golang.org/x/text/encoding/simplifiedchinese.GBK.NewDecoder()将GBK字节流解码为UTF-8再交由csv.NewReader处理,写CSV反向编码同理。