go - 更改指向 *os.File 的指针
问题描述
我已旋转文件,我需要定期更改文件,但我无法更新指向文件的指针
var (
file *os.File
)
func init() {
file, err = os.Create(fileName)
}
func main() {
ticker = time.NewTicker(time.Second * 6)
defer ticker.Stop()
go func(file *os.File) {
<- ticker.C
fn := fmt.Sprintf("%d%s", time.Now().Unix(), ".txt")
file, _ = os.Create(fn)
}(file)
http.HandleFunc("/go", goHandler)
}
func goHandler(w http.ResponseWriter, r *http.Request) {
fmt.Printf("hand File: %v\n", *file)
// when handler triggered file stay the same
file.WriteString(myPayload)
}
它在 goroutines 内部发生变化,但它不会在处理程序中做出反应,因此文件始终保持不变。
建议,请,我如何将指针更改为*os.File
解决方案
在您的代码中,goroutine 只运行一次。所以它创建了一个新文件并且什么都不做——这意味着*file
只改变了一次。
您应该更改<- ticker.C
为for _ = range ticker.C { ... }
.
*file
此外,您应该注意使用 a更改和读取值sync.Mutex
,因为两个 goroutine 之间存在数据竞争。
推荐阅读
- parallel-processing - All to All 广播实现和 MPI
- javascript - 当我将 EmailJS CDN 添加到我的 HTML 代码时,预加载器不会关闭
- webpack - webpack 需要上下文第二个回调做什么
- heroku - 如何解决在 Heroku 中安装 NLTK 包时出错
- javascript - 如何在单击按钮时隐藏和显示来自循环的部分 - Angular 8
- javascript - 检查firebase中的活动订单数
- c++ - 将 char 推入堆栈不起作用
- python - 未找到“后列表”的反向。'post-list' 不是有效的视图函数或模式名称
- python-3.x - 如何使用pdfminer3遍历一个目录下的多个PDF文件
- css - 我该如何解决这个“无效的属性值”问题?