为了账号安全,请及时绑定邮箱和手机立即绑定

咕噜咕噜:更新文件服务器提供的文件

咕噜咕噜:更新文件服务器提供的文件

Go
回首忆惘然 2022-10-04 16:02:10
我正在使用文件服务器为目录提供服务,如下所示:go func() {  fs := http.FileServer(http.Dir("./view"))  err := http.ListenAndServe(":8000", fs)  if err != nil {    log.Fatal("ListenAndServe: ", err)  }}()在目录中,我有一个文件,我正在尝试在提供目录时更新该文件。我观察到追加命令仅在我停止提供目录后阻止并更新文件。viewindex.htmlview以下是修改该文件的代码:func AppendToFile() {  f, err := os.OpenFile("./view/index.html", os.O_RDWR, 0644)  if err != nil {    panic(err)  }  defer f.Close()  // This assumes that the file ends with </body></html>  f.Seek(-15, 2)  if _, err = f.WriteString("test test test\n"); err != nil {    panic(err)  }  if _, err = f.WriteString("</body></html>\n"); err != nil {    panic(err)  }}这是预期的行为吗?谢谢!
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

网易娱乐.文件服务器函数只返回一个处理程序。因此,它不会阻塞文件系统。此处的问题可能与文件的偏移量有关。我已经在我的机器中尝试过,它工作没有任何问题。


我已经修改了你的代码;


package main


import (

    "net/http"

    "os"

    "time"

)


func main() {

    t := time.NewTicker(time.Second)

    defer t.Stop()

    go func() {

        srv := http.FileServer(http.Dir("./test"))

        http.ListenAndServe(":8080", srv)

    }()


    for {

        select {

        case <-t.C:

            appendToFile()

        }

    }

}


func appendToFile() {

    f, err := os.OpenFile("./test/index.html", os.O_RDWR, 0644)

    if err != nil {

        panic(err)

    }

    defer f.Close()

    // This assumes that the file ends with </body></html>

    f.Seek(-16, 2)

    if _, err = f.WriteString("test test test\n"); err != nil {

        panic(err)

    }

    if _, err = f.WriteString("</body></html>\n"); err != nil {

        panic(err)

    }

}

在索引中.html我最初放置空白文档,


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>


</body></html>

PS:最好先检查偏移量,然后将字符串写入该位置。


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信