用 go 写 WebAssembly入门

简介: Golang WebAssembly 入门Golang 在1.11版本中引入了 WebAssembly 支持,意味着以后可以用 go编写可以在浏览器中运行的程序,当然这个肯定也是要受浏览器沙盒环境约束的.

Golang WebAssembly 入门

Golang 在1.11版本中引入了 WebAssembly 支持,意味着以后可以用 go编写可以在浏览器中运行的程序,当然这个肯定也是要受浏览器沙盒环境约束的.

1. 浏览器中运行 Go

1.1 code

package main
func main() {
    println("Hello, WebAssembly!")
}

1.2 编译

必须是 go1.11才行

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

1.3 运行

单独的 wasm 文件是无法直接运行的,必须载入浏览器中.

mkdir test
cp test.wasm test
cp $GOROOT/misc/wasm/wasm_exec.{html,js} .

1.3.1 一个测试 http 服务器

chrome 是不支持本地文件中运行 wasm 的,所以必须有一个 http 服务器

//http.go
package main

import (
    "flag"
    "log"
    "net/http"
    "strings"
)

var (
    listen = flag.String("listen", ":8080", "listen address")
    dir    = flag.String("dir", ".", "directory to serve")
)

func main() {
    flag.Parse()
    log.Printf("listening on %q...", *listen)
    log.Fatal(http.ListenAndServe(*listen, http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
        if strings.HasSuffix(req.URL.Path, ".wasm") {
            resp.Header().Set("content-type", "application/wasm")
        }

        http.FileServer(http.Dir(*dir)).ServeHTTP(resp, req)
    })))
}

1.3.2 http.go

mv http.go test
cd test
go run http.go 

1.4 效果

在浏览器中打开http://localhost:8080/wasm_exec.html,点击 run 按钮,可以在控制台看到 Hello, WebAssembly!字符串

2. node中运行 wasm

这个更直接

node wasm_exec.js test.wasm

就可以在控制台看到Hello, WebAssembly!字符串了.

3. 其他例子

example中可以看到更多例子

3.1 bouncy

img_cf78978e4757065b7aefebcbb5a5f9c7.png

3.2 ranbow-mouse

会跟着鼠标画出彩虹图案,挺好看的
img_43d8b57276d04b4a7e3d16fed5386d73.png

3.3 bumpy

可以画一些自定义的形状,形状不同,落地效果不同.球就会反弹,三角形就不会.不过都摔不坏,不会变形,这点不够真实
img_d6700ba40e8f75dcd9cd3c45a2876e4a.png

目录
相关文章
|
18天前
|
Go
Go入门速成-定义变量
Go入门速成-定义变量
|
7月前
|
存储 Linux Go
Go语言学习1-基础入门
本篇带大家一起走近Go语言的世界
70 1
Go语言学习1-基础入门
|
4天前
|
存储 JSON Java
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(三)
在 Go 语言里,符合语言习惯的做法是使用一个单独的返回值来传递错误信息。
20 0
|
4天前
|
存储 Go C++
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(二)
Go 语言中的复合数据类型包括数组、切片(slice)、映射(map)和结构体(struct)。
28 0
|
4天前
|
Java 编译器 Go
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(一)
本文主要梳理自第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲)。
27 1
|
18天前
|
JavaScript 前端开发 Go
Go语言的入门学习
【4月更文挑战第7天】Go语言,通常称为Golang,是由Google设计并开发的一种编程语言,它于2009年公开发布。Go的设计团队主要包括Robert Griesemer、Rob Pike和Ken Thompson,这三位都是计算机科学和软件工程领域的杰出人物。
21 1
|
18天前
|
Go 开发者
Golang深入浅出之-Go语言结构体(struct)入门:定义与使用
【4月更文挑战第22天】Go语言中的结构体是构建复杂数据类型的关键,允许组合多种字段。本文探讨了结构体定义、使用及常见问题。结构体定义如`type Person struct { Name string; Age int; Address Address }`。问题包括未初始化字段的默认值、比较含不可比较字段的结构体以及嵌入结构体字段重名。避免方法包括初始化结构体、自定义比较逻辑和使用明确字段选择器。结构体方法、指针接收者和匿名字段嵌入提供了灵活性。理解这些问题和解决策略能提升Go语言编程的效率和代码质量。
33 1
|
18天前
|
编译器 Go 开发者
Go语言入门|包、关键字和标识符
Go语言入门|包、关键字和标识符
36 0
|
18天前
|
SQL Go 数据库
GORM入门到精通:构建高效Go应用的终极指南
在Go语言的世界里,数据持久化是一个不可或缺的话题。随着应用的复杂性增加,传统的数据库操作方式已经无法满足开发者对效率和便捷性的需求。这时,ORM(对象关系映射)框架应运而生,它将数据库表与对象模型之间建立映射,极大地简化了数据库操作。而在众多ORM框架中,GORM以其简洁、高效和功能丰富脱颖而出,成为了Go开发者的新宠。
|
18天前
|
Go 开发者
Go语言入门:环境搭建与基础语法
【2月更文挑战第1天】本文将引导读者从零开始接触Go语言,介绍如何搭建Go语言开发环境,并详细讲解Go语言的基础语法,包括变量、数据类型、运算符、控制流语句等。通过本文的学习,读者将能够掌握Go语言的基本编程知识,为后续深入学习打下坚实基础。