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.

Hello world

   1 package main
   2 
   3 import "fmt"
   4 
   5 func main() {
   6         fmt.Println("Hello, 世界")
   7 }

List of GOOS and GOARCH

   1 go tool dist list

Some elements of the list

android/386
android/amd64
android/arm
android/arm64
darwin/386
darwin/amd64
darwin/arm
darwin/arm64
freebsd/386
freebsd/amd64
freebsd/arm
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
netbsd/386
netbsd/amd64
netbsd/arm
openbsd/386
openbsd/amd64
openbsd/arm
windows/386
windows/amd64

WebAssembly

   1 sudo apt install golang # go version go1.11.6 linux/amd64
   2 sudo apt install golang-src
   3 mkdir ~/wasmgotest

build.sh

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

index.html

   1 <html>
   2         <head>
   3                 <meta charset="utf-8"/>
   4                 <script src="wasm_exec.js"></script>
   5                 <script>
   6                         const go = new Go();
   7                         WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
   8                                 go.run(result.instance);
   9                         });
  10                 </script>
  11         </head>
  12         <body>
  13         <h1 id="datetimeHeading">5555</h1>
  14         <canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
  15         </canvas> 
  16         </body>
  17 </html>

main.go

   1 package main
   2 
   3 //import "fmt"
   4 import "time"
   5 import "syscall/js"
   6 
   7 func showTime(){
   8   for x := 0; ; x++ { // infinite loop
   9     currentTime := time.Now()
  10     // console.log in the browser
  11     //fmt.Printf("Hello, WebAssembly %s  ! \n" , currentTime.String() )
  12     document := js.Global().Get("document")
  13     document.Call("getElementById", "datetimeHeading").Set("innerHTML", currentTime.String())
  14     //document.getElementById("datetimeHeading").innerHTML="aaa"
  15     time.Sleep( 2 * time.Second  )
  16   }
  17 }
  18 
  19 func main() {
  20   go showTime()  // go routine executes the called function as a lightweight thread 
  21 
  22   document := js.Global().Get("document")
  23   c := document.Call("getElementById","myCanvas")
  24   ctx := c.Call("getContext","2d")
  25   ctx.Call("beginPath")
  26   ctx.Call("arc","95", "50", "40", "0", "6.283")
  27   ctx.Call("stroke");
  28 
  29   time.Sleep(24*time.Hour)
  30 }

   1 cp /usr/share/go-1.11/misc/wasm/wasm_exec.js .

golang (last edited 2023-05-26 14:35:27 by 127)