-
Go语言基础类型共5种:bool、整数类、浮点类、复数类、string;其中bool仅含true/false且不与0/1互转;整数类分有符号/无符号及byte(uint8)、rune(int32)别名;浮点类为float32/float64,比较须用math.Abs避免==。
-
Go中无引用类型,但指针等可模拟引用语义;必须用T而非T的场景包括:修改原变量、避免大结构体拷贝、实现仅在T定义的方法集的接口。
-
Go函数参数均为值传递,slice/map/channel/interface传的是含指针的结构体副本,故修改元素或写入键值会影响原变量,但重赋值不会;需替换整个结构时须显式传指针。
-
ClickHouseGo驱动连不上主因是默认启用TLS和压缩,需显式设secure=false、compress=false;批量写入要避免单行INSERT,改用stmt.Exec批量传参(1w–10w行/批);读取Nullable(String)必须用sql.NullString或ch.String;time.Time查询需注意时区匹配,建议用字符串格式WHERE条件。
-
AC自动机比Trie树快在Search阶段为真正线性时间O(n),而Trie树最坏O(n×m);实测10万词库+500字文本,AC自动机0.8ms,Trie树超12ms。
-
在Golang中,反射与空接口配合可用于灵活的类型判断与处理。通过reflect包可提取interface{}中的具体类型和值,如使用reflect.TypeOf()和reflect.ValueOf()获取类型信息。1.使用反射实现通用类型判断逻辑,可通过Kind()和Type()方法识别传入值的类型并进行分支处理。2.可结合类型断言与反射,先做粗粒度判断,再深入分析具体类型或调用方法。3.注意事项包括:反射性能较低、缺乏编译期类型检查、维护难度大,建议仅在必要场景如框架开发中使用。掌握这两者的关系及使用
-
Go切片是对底层数组的轻量级引用,由指针、长度(len)和容量(cap)三部分构成;创建方式有字面量初始化、make函数及截取;len为当前元素数,cap为起始位置至数组末尾的总元素数;支持修改、append追加(可能扩容)、共享底层数组(有意外修改风险),需copy避免;常用操作包括删除元素、截取、清空、判空等。
-
go_proto_library生成的.pb.go文件为什么总找不到包?根本原因是protoc生成代码时默认用package声明匹配.proto文件的package,但Go的import路径和磁盘路径必须一致,而很多人把.proto放在api/下却希望生成到github.com/x/y/api,结果Go编译器只认路径,不认package声明。实操建议:用--go_out=paths=source_relative:./让protoc按.pro
-
应使用SharedInformer监听Secret变更并原子化重载配置,避免轮询、阻塞操作及base64解码panic;需校验权限、namespace和ResourceVersion,失败时保留旧配置。
-
CGO调用慢的根本原因是栈切换、写屏障检查和GC暂停等待;C.CString/C.GoString引发深拷贝,高频调用开销达50–200ns;应复用C内存、避免循环分配、慎用deferfree,并优先将计算移至Go侧。
-
Go模块缓存是Go工具链自动维护的本地目录,用于存储已下载模块以加速构建、避免重复下载并支持离线开发;默认路径为$HOME/go/pkg/mod(Linux/macOS)或%USERPROFILE%\go\pkg\mod(Windows),通过硬链接或复制复用缓存文件。
-
Contains不能直接用interface{}实现,因为[]string不是[]interface{}的子类型,内存布局不同且Go不支持隐式转换;泛型需约束为Tcomparable才能安全使用==比较。
-
Go实现Session管理需生成安全随机sessionID并设HttpOnlyCookie,用sync.Map并发安全存储含过期时间的SessionData,通过中间件自动加载验证,并定期goroutine清理过期项。
-
<p>使用无缓冲channel实现队列时,若生产者与消费者未协同启动(如仅生产无消费,或消费先阻塞等待),所有goroutine会因channel操作阻塞而休眠,触发“allgoroutinesareasleep-deadlock”错误。</p>
-
Golang提供多种文件读取方式,适用于不同场景。1.使用os.ReadFile可快速读取小文件,一次性加载至内存,但不适合大文件;2.通过bufio.Scanner可按行读取处理大文件或日志文件,需注意缓冲区大小及文件关闭;3.io.ReadAll适用于任意io.Reader接口读取,通用性强但同样存在内存压力风险;此外需注意路径问题、错误处理及性能优化,根据文件大小和使用场景选择合适方法以提升程序稳定性与效率。