可以将 golang 通道绑定到模板中

sbo*_*ked 5 go go-templates

upload.tmpl.html我有这样的go 模板 ( ):

\n\n
<html>\n<body>\n  <div class="container">\n    <ul>\n      <li>current fileName : {{ .fileName}} </li>\n    </ul> \n</body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n\n

处理程序uploadHandler.go

\n\n
func UploadHandler(c *gin.Context) {\n    file, header, err := c.Request.FormFile("file-upload")\n    if err != nil {\n        log.Fatal("Erreur dans la r\xc3\xa9cup\xc3\xa9ration de fichier")\n    }\n    //...\n    fileName := make(chan string)\n\n    go ReadCsvFile(bytes, fileName)\n    go func() {\n        for {\n            log.Info(<-fileName)\n        }\n    }()\n\n    c.HTML(http.StatusOK, "upload.tmpl.html", gin.H{\n        "fileName":    <-fileName,\n    })\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

ReadCsvFile()这样的方法:

\n\n
func ReadCsvFile(bytesCSV []byte, fileName chan string) {\n    r := bytes.NewReader(bytesCSV)\n    reader := csv.NewReader(r)\n    reader.Comma = \';\'\n\n    records, err := reader.ReadAll()\n\n    if err != nil {\n        fmt.Println("Error:", err)\n        return\n    }\n\n    db, _ := databaseApp.OpenDatabase()\n    defer db.Close()\n    for _, record := range records {\n        fileName <- record[0]\n        product := &em.Product{\n            Name:        record[0],\n            //...\n        }\n        db.Create(product)\n\n    }\n    fileName <- "done"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试显示模板中每一行的当前文件名,但是可以像这样将通道绑定到模板中吗?因为这样页面就不再加载了。

\n

die*_*ter 1

使用网络套接字。这里有些例子:

HTML/JavaScript:

<script>
    var ws= new WebSocket("ws://yoursite.com");
    ws.onmessage = function (event) {
        console.log(event.data);
        // $('#your-element').html(event.data);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

转到网络套接字:

func websocketSenderHandler(conn *websocket.Conn){
    for {
        msg := <- globalChannel
        conn.WriteMessage(websocket.TextMessage, msg)
    }
}
Run Code Online (Sandbox Code Playgroud)

Go 中的更多 Websocket:golang.org/x/net/websocket

其他示例: https: //github.com/golang-samples/websocket