-
最近在做一个需求,功能很简单,就是开发一个轻量级客户端,将一个指定文件中的内容通过 TCP 发送到服务器。由于该文件特别大,有可能到达100G的数量级,因此处理起来会比较慢,为了给用
-
1.数组
数组是值类型
[10]int 和 [20]int是不同类型
调用func(arr [10]int)会拷贝数组
在go语言中一般不直接使用数据
package main
import "fmt"
func updateArr(arr *[5]int) {
arr[0] = 100
}
func updateArrThroughSlice(arr []int)
-
浅析golang切片截取(删除)功能
1. 引言
golang的切片被认为是和C++的vector容器类似,都可以认为是动态数组,但又不完全一样。
那么区别到底在哪里呢?对元素的删除方式是很重要的一点区别
对
-
Go 可以用 //go:embed 把模板目录编译进程序,再把 embed.FS 交给 html/template.ParseFS 读取。本文重点说明目录匹配、正斜线路径、错误处理和复用方式。
-
Go 遍历目录时,可以在 filepath.WalkDir 回调中判断 DirEntry,再用 filepath.SkipDir 跳过指定子树。本文比较本地路径与抽象 FS 的写法,说明目录匹配、错误处理、SkipAll 和符号链接等边界。
-
Go plugin.Open 加载 .so 时,版本不匹配通常不是单看 Go 版本,而是宿主与插件的工具链、构建条件和共享依赖没有保持一致。本文按排查顺序定位原因,并给出统一构建方案。
-
bufio.Reader.WriteTo 返回的是已复制字节数 n 和复制错误 err。目标 Writer 可能在部分写入后失败,调用方应同时保存 n 与 err,并区分完整复制、目标写入失败和源读取失败。
-
Go 服务出现内存指标突增时,不能只看 Sys 或单次 HeapAlloc。本文用 runtime.MemStats 建立采样快照,结合堆保留、对象数量、GC 次数和分配速率区分短时峰值、缓存保留与持续增长。
-
Go 事务业务代码返回 nil 并不代表提交成功。本文用可复用的 WithinTx 函数分别处理 BeginTx、业务执行、Rollback 与 Commit 错误,并说明上下文取消、panic 和 sql.ErrTxDone 的边界。
-
Go bufio.Scanner 报 too many empty tokens,通常不是缓冲区太小,而是自定义 SplitFunc 在 EOF 下反复返回未推进的非 nil token。本文用返回值关系说明根因、修复方式和 Reader 的适用边界。
-
Go unsafe.Slice 的长度参数是元素数,不是 C 缓冲区字节数。本文用 cgo 示例说明如何校验指针、换算长度、维持 C 内存生命周期,并避开布局和 Go 指针陷阱。
-
errors.Join 返回的是可遍历的错误树,业务判断应直接使用 errors.Is;需要展示全部原因时再读取 Unwrap() []error,不能依赖字符串拆分或 errors.Unwrap。
-
讲清 Go json.Decoder 读取连续 JSON 值时如何区分正常 EOF、记录中途截断、语法错误和类型错误,并用 InputOffset 记录可恢复的失败位置。
-
Go 1.23 引入的 iter.Seq 让自定义序列可以直接配合 for range,但提前 break 与 iter.Pull 的 stop 处理决定了资源能否及时释放。本文用分页读取与筛选场景拆解 push 迭代器、pull 迭代器和停止边界。
-
本文解析Go语言中因不当使用int到uint8类型转换(如循环变量强制转为uint8)引发的indexoutofrange运行时错误,揭示其根本原因是整数溢出导致循环不执行,最终返回空切片,被调用方访问时崩溃。本文解析Go语言中因不当使用`int`到`uint8`类型转换(如循环变量强制转为`uint8`)引发的`indexoutofrange`运行时错误,揭示其根本原因是整数溢出导致循环不执行,最终返回空切