MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 9 as of 2020-06-20 23:09:27
  • golang

golang

Go programmmig language

The Go programming language is an open source project to make programmers more productive.

Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. Go compiles quickly to machine code yet has the convenience of garbage collection and the power of run-time reflection. It's a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language.

  • https://golang.org/

  • https://golang.org/pkg/

  • https://tour.golang.org/list

  • https://tour.golang.org/concurrency/1

  • https://learnxinyminutes.com/docs/go/

  • https://github.com/golang/go/wiki/WebAssembly#introduction

Hello world

package main

import "fmt"

func main() {
        fmt.Println("Hello, 世界")
}

WebAssembly

  • On debian buster
    • sudo apt install golang # go version go1.11.6 linux/amd64
    • sudo apt install golang-src
  • mkdir ~/wasmgotest

build.sh

go build -o main main.go
GOOS=js GOARCH=wasm go build -o main.wasm main.go

index.html

<html>
        <head>
                <meta charset="utf-8"/>
                <script src="wasm_exec.js"></script>
                <script>
                        const go = new Go();
                        WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
                                go.run(result.instance);
                        });
                </script>
        </head>
        <body>
        <h1 id="datetimeHeading">5555</h1>
        <canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
        </canvas> 
        </body>
</html>

main.go

package main

//import "fmt"
import "time"
import "syscall/js"

func showTime(){
  for x := 0; ; x++ { // infinite loop
    currentTime := time.Now()
    // console.log in the browser
    //fmt.Printf("Hello, WebAssembly %s  ! \n" , currentTime.String() )
    document := js.Global().Get("document")
    document.Call("getElementById", "datetimeHeading").Set("innerHTML", currentTime.String())
    //document.getElementById("datetimeHeading").innerHTML="aaa"
    time.Sleep( 2 * time.Second  )
  }
}

func main() {
  go showTime()  // go routine executes the called function as a lightweight thread 

  document := js.Global().Get("document")
  c := document.Call("getElementById","myCanvas")
  ctx := c.Call("getContext","2d")
  ctx.Call("beginPath")
  ctx.Call("arc","95", "50", "40", "0", "6.283")
  ctx.Call("stroke");

  time.Sleep(24*time.Hour)
}
  • cp /usr/share/go-1.11/misc/wasm/wasm_exec.js .
  • Check on the browser file:///home/vitor/wasmgotest/index.html

  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01