gpt4 book ai didi

go - 可以将 golang channel 绑定(bind)到模板中

转载 作者:IT王子 更新时间:2023-10-29 00:47:20 25 4
gpt4 key购买 nike

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

<html>
<body>
<div class="container">
<ul>
<li>current fileName : {{ .fileName}} </li>
</ul>
</body>
</html>

处理程序 uploadHandler.go

func UploadHandler(c *gin.Context) {
file, header, err := c.Request.FormFile("file-upload")
if err != nil {
log.Fatal("Erreur dans la récupération de fichier")
}
//...
fileName := make(chan string)

go ReadCsvFile(bytes, fileName)
go func() {
for {
log.Info(<-fileName)
}
}()

c.HTML(http.StatusOK, "upload.tmpl.html", gin.H{
"fileName": <-fileName,
})
}

和这样的 ReadCsvFile() 方法:

func ReadCsvFile(bytesCSV []byte, fileName chan string) {
r := bytes.NewReader(bytesCSV)
reader := csv.NewReader(r)
reader.Comma = ';'

records, err := reader.ReadAll()

if err != nil {
fmt.Println("Error:", err)
return
}

db, _ := databaseApp.OpenDatabase()
defer db.Close()
for _, record := range records {
fileName <- record[0]
product := &em.Product{
Name: record[0],
//...
}
db.Create(product)

}
fileName <- "done"
}

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

最佳答案

使用网络套接字。以下是一些示例:

HTML/JavaScript:

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

去网络套接字:

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

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

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

关于go - 可以将 golang channel 绑定(bind)到模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com