将 JavaScript 转换为 GopherJs 时出现问题

Problems converting JavaScript to GopherJs

我正在尝试将这整段代码从 Javascript 转换为 GopherJs。 到目前为止,我还不能做事件监听器,因为我还是 Javascript 的新手。 这是 JavaScript

window.addEventListener("load", function(evt) {
    var output = document.getElementById("output");
    var input = document.getElementById("input");
    var ws;
    var print = function(message) {
        var d = document.createElement("div");
        d.innerHTML = message;
        output.appendChild(d);
    };
    document.getElementById("open").onclick = function(evt) {
        if (ws) {
            return false;
        }
        ws = new WebSocket("{{.}}");
        ws.onopen = function(evt) {
            print("OPEN");
        }
        ws.onclose = function(evt) {
            print("CLOSE");
            ws = null;
        }
        ws.onmessage = function(evt) {
            print("RESPONSE: " + evt.data);
        }
        ws.onerror = function(evt) {
            print("ERROR: " + evt.data);
        }
        return false;
    };
    document.getElementById("send").onclick = function(evt) {
        if (!ws) {
            return false;
        }
        print("SEND: " + input.value);
        ws.send(input.value);
        return false;
    };
    document.getElementById("close").onclick = function(evt) {
        if (!ws) {
            return false;
        }
        ws.close();
        return false;
    };
});

我已经进行了几次迭代尝试,但仍然无法正常工作。 以下是我最后一次尝试的片段。

var ws *websocketjs.WebSocket
var err error
//js.Global.Get("document").Call("write", "Hello world!")
js.Global.Call("addEventListener", "load", func(ev *js.Object) {
    //js.Global.Get("document").Get("open") = func(ev *js.Object){
    onOpen := func(ev *js.Object) {
        if ws == nil {
            ws, err = websocketjs.New("ws://localhost:8000/ws") // Does not block.
            if err != nil {
                println(err)
            }
        }

        fmt.Println("we are past the ws part")
        js.Global.Get("document").Call("write", "It is opened!")
        /////////////////////////////////////////////////
        err = ws.Send("Hello Websockets!") // Send a text frame.
        if err != nil {
            fmt.Println(err)
        }
        println("it is open now")
    }

    ws.AddEventListener("open", false, onOpen)

    //}

})

 //ws.AddEventListener("open", false, onOpen)
//ws.AddEventListener("message", false, onMessage)
//ws.AddEventListener("close", false, onClose)
//ws.AddEventListener("error", false, onError)
err = ws.Close()

我至少希望正确完成前两部分。我可以用一个很好的例子来完成剩下的工作。 谢谢

为了获得 DOM 我使用了 "honnef.co/go/js/dom" 库。
其他一切都像 Javascript.
中那样一步步进行 示例:

package main

import "honnef.co/go/js/dom"

func main() {
    d := dom.GetWindow().Document()
    h := d.GetElementByID("foo")
    h.SetInnerHTML("Hello World")
}