golang
已收录文章:13895篇
-
bytes.Buffer是Go中高效处理字节数据的工具,支持动态扩容,实现io.Reader和io.Writer接口。1.可通过WriteString、WriteByte等方法写入数据,自动扩容;2.提供Next、ReadByte等方法读取内容,Reset可重用Buffer;3.用String或Bytes获取结果,避免外部修改;4.建议预设容量、避免并发共享、用deferReset复用。适用于日志、协议编码等场景。156 收藏
-
Go并发中需用defer+recover捕获panic,通过errorchannel传递错误,结合context处理超时取消,并利用errgroup统一管理多协程错误,确保错误不遗漏、panic不扩散。156 收藏
-
答案:Go中实现并发安全队列可使用channel或Mutex+切片。channel天然并发安全,适合简单场景;自定义队列通过sync.Mutex保护切片操作,支持泛型、动态扩容与复杂控制,适用于需非阻塞操作或批量处理的场景。高并发下可考虑无锁优化,但应避免过早优化。实际选择需权衡需求与复杂度。156 收藏
-
Golang的archive/zip库通过手动处理目录结构实现压缩与解压缩功能。压缩时,addFileToZip函数判断是否为目录并设置相应属性,若为目录则添加斜杠并设置权限;非目录文件则使用zip.Deflate算法压缩,并将文件内容写入zip包中。解压缩时,decompressFile函数根据文件信息判断是否为目录,若是则先创建对应目录结构,再将文件内容写入磁盘。此外,该库不支持密码保护,需使用第三方库如github.com/alexmullins/zip实现;性能优化可通过流式处理、调整压缩级别、并156 收藏
-
答案:Go语言的简洁性要求显式错误处理和合理并发控制。应通过返回error而非panic处理可预期错误,利用错误包装、自定义错误类型和集中化处理提升代码可读性;并发编程需避免竞态、goroutine泄露和死锁,优先用channel通信而非共享内存,结合context管理生命周期,并使用sync原语同步;接口设计应遵循“小接口”原则,避免大接口导致的职责过载,注意nil接口值与nil具体值的区别,防止因接口内部类型不为nil导致的逻辑错误。156 收藏
-
jwt jwt的原理和session有点相像,其目的是为了解决rest api中无状态性 因为rest接口,需要权限校验。但是又不能每个请求都把用户名密码传入,因此产生了这个token的方法 流程: 用户访问auth接155 收藏