golang 获取当天0点时间_golang使用webAssembly的方式

WebAssembly (WASM) 是一种新的编码方式,可以在现代的网络浏览器中运行- 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能. 可以将C/C++/Rust/GO代码编译成.wasm文件, 然后运行在web上面.

本文仅介绍Golang与WASM使用的相关基础知识.

环境

需要golang版本高于go1.11, 本文golang版本:

$ go version
> go version go1.11.1 darwin/amd64

js中调用golang函数案例

本案例基于goland IDE编写, 为了获取syscall/js库的自动提示, 需要对IDE进行如下设置:

593f3cfc57c48a46b3d7e5fd168f920d.png

设置好之后, 进行编辑go文件: main.go

package mainimport ("fmt""syscall/js"
)func foo( args []js.Value) {fmt.Println("hellow wasm")fmt.Println(args)
}func main() {// 将golang中foo函数注入到window.foo中js.Global().Set("foo", js.NewCallback(foo))// 将100注入到 window.value中js.Global().Set("value", 100)select {}
}

将此main.go文件, 编译成wasm文件:

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

接下来需要开启一个简单的web服务器并将上一步的wasm文件复制到案例目录中:

server.go:

package mainimport "net/http"func main() {http.ListenAndServe(":8080", http.FileServer(http.Dir("./test1"))) // 此为案例文件夹目录
}

将golang源码中的wasm_exec.js复制到本案例中:

cp $GOROOT/misc/wasm/wasm_exec.js .

index.html:

<html>
<head><meta charset="utf-8"><script src="wasm_exec.js"></script><script>const go = new Go();WebAssembly.instantiateStreaming(fetch("test.wasm"), go.importObject).then((result) => {go.run(result.instance);});</script>
</head>
<body></body>
</html>

整体案例文件:

$ tree test1
test1
├── index.html
├── server.go
├── test.wasm
└── wasm_exec.js

运行 go run server.go即可启动服务

浏览器中访问 http://127.0.0.1:8080/index.html, 右键->检查->console

1ea84d82e14d78aa5715ed3474b22632.png

即可对golang中的函数 以及 属性进行访问.

GO获取DOM元素, 操作标签属性

同样的方式, main.go中:

package mainimport ("syscall/js"
)func setDivRedColor(args []js.Value)  {// 获取DOM元素, 进行设置属性,  call方法为调用js方法js.Global().Get("document").Call("getElementById", "div").Set("style", "width: 300px; height: 300px; background-color: red")// 注意, 此处设置style的时候, 是会覆盖掉html中的style设置
}func main() {js.Global().Set("setDivRedColor", js.NewCallback(setDivRedColor))select {}
}

进行编译, 得到wasm文件, 复制到案例项目中

项目中server.go不变, index.html改为:

<html>
<head><meta charset="utf-8"><script src="wasm_exec.js"></script><script>const go = new Go();WebAssembly.instantiateStreaming(fetch("test.wasm"), go.importObject).then((result) => {go.run(result.instance);});</script>
</head>
<body><div style="width: 300px; height: 300px; background-color: yellow" id="div"></div>
</body>
</html>

启动服务, 浏览器访问http://127.0.0.1:8080/index.html

f1542a568827315f966561b4ff34363e.png

当console中调用对应的golang函数:

05c27b0740393fce68c19d6a287ee743.png

总结

以上就是Go中使用WASM的基本方式, golang对于WASM支持也在不断的加强. 此案例编译生成的wasm文件为1.4M, 后续也许会优化缩小.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis数据库的连接

对于Redis缓存数据库的连接要有两大步&#xff0c;一是启动我们的Redis服务&#xff0c;只有Redis服务启动了我们才能对它进行连接等相关操作&#xff0c;二就是Redis数据库的连接了。 首先&#xff0c;确保我们电脑上已经安装好了Redis数据库。 一 . 启动Redis服务 1.在我的…

dnn神经网络 缺点_抄近路神经网络如何因找捷径而犯错

导读&#xff1a;Te road reaches every place, the short cut only one”— James Richardson见路不走&#xff1a;现在有很多大师都告诉别人要去照抄别人&#xff0c;有的大师告诉别人不要去照抄别人&#xff0c;这两种说法都不全面&#xff0c;首先要分析事物发生的本质&…

java - 数组逆序输出

根据提示输入一串数组&#xff08;多个类型完全相同数字&#xff09;当输入数组完成时输入-1&#xff08;-1代表结束&#xff09;&#xff0c;程序会在控制台输出你输入的数组&#xff0c;并且还会再此把你输入的数组逆序输出。 结果演示 代码展示 package com.three;import…

分组后统计总数_大数据时代看排球:排球技术统计能告诉你什么?

2020-08-25 中国排协排球技术统计是将排球比赛行为按照一定的规则和排列方式进行记录&#xff0c;再将记录的数据汇总形成统计表格的一种统计行为。国际排联(FIVB)和中国排球协会(CVA)公布的一系列技术统计数据&#xff0c;对指导训练、比赛和进行相关的排球科研工作具有重要指…

计算机设计大赛国奖作品_2. 报名材料

计算机设计大赛国奖作品_2. 报名材料 本系列是2021年中国大学生计算机设计大赛作品“环境监测无人机航线优化”的相关文档&#xff0c;获得2021年西北赛区一等奖&#xff0c;国赛三等奖。学生习作&#xff0c;只供大家参考。 计算机设计大赛国奖作品_1. 项目概要 计算机设计大…

【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测 1. 图像分割基本概念 图像分割就是把图像分成若干个特定的、具有独特…

【youcans 的 OpenCV 例程200篇】148. 图像分割之线检测

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】148. 图像分割之线检测 2. 点、线和边缘检测 本节基于图像灰度的不连续性&#xff0c;讨论根据灰…

数组顺序的移动

按照控制台的文本提示输入数组的长度&#xff0c;输入数组的元素&#xff0c;控制台会输出你输入的数组&#xff0c;然后会有文本提示让你输入移动的位数&#xff0c;当你输入之后&#xff0c;会重新输出移动之后的数组。 结果展示 代码演示 package com.three;import java.…

计算机设计大赛国奖作品_4. 界面设计

计算机设计大赛国奖作品_4. 界面设计 计算机设计大赛国奖作品_1. 项目概要 计算机设计大赛国奖作品_2. 报名材料 计算机设计大赛国奖作品_3. 需求分析 计算机设计大赛国奖作品_4. 界面设计 计算机设计大赛国奖作品_5. 核心算法 计算机设计大赛国奖作品_6. 测试报告 [计算机设计…

【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型 2. 点、线和边缘检测 本节基于图像灰度的不连续性&#xff0c;讨论根据…

求数列1/3到1/n之和

求数列之和&#xff0c;数列从1/3开始&#xff0c;到1/n结束&#xff0c;当我们输入任意数x的时候&#xff0c;那么这个数列相加之和到1/x结束&#xff0c;控制台会输出数列之和。 求1/3到1/9数列之和 结果演示 代码演示 package com.four;import java.util.Scanner; publi…

【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子 2. 点、线和边缘检测 本节基于图像灰度的不连续性&#xff0c;讨论根据灰…

计算字符串长度

字符串是任意类型任意数字组成的一段字符&#xff0c;那么我们如何计算此段字符串的长度呢&#xff1f;&#xff1f;&#xff1f; 结果演示 代码演示 package com.four;import java.util.Scanner; public class Long {public static void main(String[] args) {Scanner inpu…

【youcans 的 OpenCV 例程200篇】151. 边缘检测中的平滑处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】151. 边缘检测中的平滑处理 2. 点、线和边缘检测 2.4 边缘检测的常用梯度算子 边缘检测的基本方…

排序 从小到大输出

根据控制台文本提示输入三个数字&#xff0c;控制台会按照从小到大的顺序输出。 结果演示 代码演示 package com.four;import java.util.Arrays; import java.util.Scanner; public class Paixu {public static void main(String[] args) {Scanner input new Scanner(Syste…

c语言uint32_使C语言实现面向对象的三个要素,你掌握了吗?

编排 | strongerHuang微信公众号 | strongerHuang不知道有多少人去了解过语言的发展史&#xff0c;早期C语言的语法功能其实比较简单。随着应用需求和场景的变化&#xff0c;C语言的语法功能在不断升级变化。虽然我们的教材有这么一个结论&#xff1a;C语言是面向过程的语言&am…

【youcans 的 OpenCV 例程200篇】152. 边缘检测之 LoG 算子

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】152. 边缘检测之 LoG 算子&#xff08;Marr-Hildreth 算法&#xff09; 2.5 LoG 边缘检测算子&…

【youcans 的 OpenCV 例程200篇】153. 边缘检测之 DoG 算子

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】153. 边缘检测之 DoG 算子 2.6 DoG 边缘检测算子 LoG 算子的计算量较大&#xff0c;可以通过数学…

目标检测_目标检测: AnchorFree 时代

本文转载自Smarter。自从2018年8月CornerNet开始&#xff0c;Anchor-Free的目标检测模型层出不穷&#xff0c;最近达到了井喷的状态&#xff0c;宣告着目标检测迈入了Anchor-Free时代。其实Anchor-Free并不是一个新概念了&#xff0c;大火的YOLO算是目标检测领域最早的Anchor-F…

热点地图

使用H5制作一个中国的热点地图&#xff0c;地图上标识出的地方会有波纹向四周散发的动态效果。 效果演示 代码演示 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type" content&qu…