如何在go wasm平台实现文件读写
现阶段,在浏览器中运行的几乎都是JavaScript代码。JavaScript虽然有各种细节上的问题,但是整体上它还是很好的解决了Flash时代的致命问题。有时,我们又有在浏览器中运行其他语言的需求,这种需求就导致了WebAssembly的诞生。
go语言的官方编译器在1.11版本便添加了对 Web Assembly 的支持,但是截止到1.18.3,仍然有一些功能未支持完善,比如本文要实现的文件读写功能。
整体方案设计
浏览器因为 Flash 当年发生的安全问题,基本全部禁止对本地文件的直接访问。我们想要实现文件读写只有两个方向可以走,一是部署一台文件服务器,将客户端的文件储存在服务器上;二是在浏览器内部寻找一个储存信息的方法,使用这个方法自己实现一套文件系统。
第一个方案技术上是可行的,不过用户体验不会太好。想象一下,个人每次访问文件都要从服务器上现场获取,其中的延迟、网络波动、访问较大文件需要的时间,以及安全性方面都无法做的太好。
而第二个方案技术上也是可行的。浏览器虽然禁止对本地文件的直接访问,但是也为应用的存储需求提供了解决方案。按F12打开Chrome的开发工具界面,点击Application,可以看到有一项Storage。Chrome其实为应用提供了丰富的存储设施,包括本地存储空间、会话存储空间、Cookie以及IndexedDB等。
未完