2016-05-03 9 views
5

にgolangチャネルをバインドすることが可能です。私がこのように行くのテンプレート(<code>upload.tmpl.html</code>)を持っているテンプレート

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" 
} 

私は現在のファイル名oを表示しようとしていますテンプレート内の各行を削除することはできますが、このようにテンプレートにチャンネルをバインドすることは可能ですか?このようにしてページはもはや読み込まれません。

+1

すべてのレンダリング後あなたはajax/jsを使ってページを "リフレッシュする"ことができます – dit

答えて

2

WebSocketを使用してください。ここではいくつかの例があります:ゴーで

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

もっとWebSocketを:

HTML/JavaScriptの:

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

ゴーWebSocketをgolang.org/x/net/websocket

その他の例:https://github.com/golang-samples/websocket

+0

申し訳ありません、それは 'websocket.Message.Send(conn、&msg)'ではありませんか?そこには 'WriteMessage()'関数がありません。 'Write()'は 'io.Write()'インタフェースと互換性がありますか? –

+1

この[issue](https://github.com/golang/go/issues/18152)と[コミット](https://github.com/golang/net/commit/97edce0b2e423f6a8debb459af47f4a3cb4ff954)のstd websocketパッケージを使用したisn最高のアイデアだ。 [Gorilla websocket](github.com/gorilla/websocket)がより好ましい。 –

+0

@olegkovalov私の例はゴリラwebsocketです。 – dit

関連する問題