Golang在循环中如何写入到单独的文件
Golang在循环中如何写入到单独的文件 我有一个简单的 for 循环,如下所示:
for i := 0; i < len(Item.Url); i++ {
Item.Request[i])
}
我希望为每个 [i] 编写一个函数,将结果写入单独的文件,例如 log_1、log_2、log_3。
func WriteResults(filename string, result string) {
f, err := os.Create(filename)
if err != nil {
log.Fatal(err)
return
}
_, err = f.WriteString(result)
if err != nil {
log.Fatal(err)
f.Close()
return
}
err = f.Close()
if err != nil {
log.Fatal(err)
return
}
}
更多关于Golang在循环中如何写入到单独的文件的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
你好,@devdavid。我想我明白你想做什么,但我不太清楚你的问题是什么。你是想问如何创建带有递增计数的文件名?还是如何在循环中调用函数?或者是其他问题?
更多关于Golang在循环中如何写入到单独的文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
抱歉,如何在循环中调用我的写入函数,以便创建一个带有递增计数的独立文件。 如果我在循环内部调用我的写入函数,我只会得到一个包含多个内容的输出文件。
在循环中为每个迭代写入单独文件,可以通过动态生成文件名实现。以下是具体实现:
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
// 示例数据
Item := struct {
Url []string
Request []string
}{
Url: []string{"url1", "url2", "url3"},
Request: []string{"result1", "result2", "result3"},
}
for i := 0; i < len(Item.Url); i++ {
// 动态生成文件名
filename := fmt.Sprintf("log_%d.txt", i+1)
WriteResults(filename, Item.Request[i])
}
}
func WriteResults(filename string, result string) {
f, err := os.Create(filename)
if err != nil {
panic(err)
}
defer f.Close()
_, err = f.WriteString(result)
if err != nil {
panic(err)
}
}
如果需要更灵活的文件命名,可以使用格式化字符串:
for i := 0; i < len(Item.Url); i++ {
// 使用strconv格式化数字
filename := "log_" + strconv.Itoa(i+1) + ".txt"
WriteResults(filename, Item.Request[i])
}
对于并发写入场景,需要添加同步机制:
import "sync"
func main() {
Item := struct {
Url []string
Request []string
}{
Url: []string{"url1", "url2", "url3"},
Request: []string{"result1", "result2", "result3"},
}
var wg sync.WaitGroup
for i := 0; i < len(Item.Url); i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
filename := fmt.Sprintf("log_%d.txt", index+1)
WriteResults(filename, Item.Request[index])
}(i)
}
wg.Wait()
}
如果需要在文件名中包含时间戳:
import "time"
for i := 0; i < len(Item.Url); i++ {
timestamp := time.Now().Format("20060102_150405")
filename := fmt.Sprintf("log_%d_%s.txt", i+1, timestamp)
WriteResults(filename, Item.Request[i])
}

