文件替换需先读取再安全写回:用os.ReadFile读取,strings.ReplaceAll或regexp进行字符串/正则替换,再通过.tmp临时文件+os.Rename原子更新,避免覆盖丢失。
直接读取文件内容,用字符串或正则替换后写回原文件即可,关键在于避免覆盖、处理编码和错误。
使用 os.ReadFile 读取整个文件到内存(适合中小文件),再用 strings.ReplaceAll 或 strings.Replace 修改:
当匹配逻辑复杂(如替换带数字的版本号、特定格式的 URL)时,用 regexp 包:
换:r.ReplaceAllString(content, "v2.0.0") 或 r.ReplaceAllFunc(...)
不要直接 os.WriteFile(filename, newBytes, 0644) 覆盖——万一出错会丢原文件。推荐两步法:
// 替换文件中所有 "GO_VERSION" 为 "1.22"
data, err := os.ReadFile("config.txt")
if err != nil {
log.Fatal(err)
}
newData := strings.ReplaceAll(string(data), "GO_VERSION", "1.22")
err = os.WriteFile("config.txt.tmp", []byte(newData), 0644)
if err != nil {
log.Fatal(err)
}
err = os.Rename("config.txt.tmp", "config.txt")
if err != nil {
log.Fatal(err)
}