GopherJS:从 Go 到 JavaScript 的编译器,用于在浏览器中运行 Go 代码-开源

  • H1_440283
    了解作者
  • 372.8KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-27 07:44
    上传日期
GopherJS 将 Go 代码编译为纯 JavaScript 代码。 它的主要目的是让您有机会在 Go 中编写仍可在所有浏览器中运行的前端代码。 几乎所有东西都受支持,包括 Goroutines(兼容性文档)。 大多数情况下性能相当不错,参见 HTML5 游戏引擎基准测试。 不支持 Cgo。 GopherJS 需要 Go 1.16 或更新版本。 如果您需要较旧的 Go 版本,则可以使用较旧的 Gopher 版本。 GopherJS 在生成代码时使用您平台的默认 GOOS 值。 支持的 GOOS 值有:linux、darwin。 如果您在不同的平台上(例如,Windows 或 FreeBSD),您需要将 GOOS 环境变量设置为支持的值。 gopherjs serve 是一个可以在开发过程中使用的有用命令。 默认情况下,它会在“:8080”上启动一个 HTTP 服务器,然后使用 GopherJS 动态编译你的 Go 包并为它们提供服务。
GopherJS 1.16.2 (for Go 1.16.4).zip
内容介绍
GopherJS - A compiler from Go to JavaScript ------------------------------------------- [![GoDoc](https://godoc.org/github.com/gopherjs/gopherjs/js?status.svg)](https://godoc.org/github.com/gopherjs/gopherjs/js) [![Sourcegraph](https://sourcegraph.com/github.com/gopherjs/gopherjs/-/badge.svg)](https://sourcegraph.com/github.com/gopherjs/gopherjs?badge) [![Circle CI](https://circleci.com/gh/gopherjs/gopherjs.svg?style=svg)](https://circleci.com/gh/gopherjs/gopherjs) GopherJS compiles Go code ([golang.org](https://golang.org/)) to pure JavaScript code. Its main purpose is to give you the opportunity to write front-end code in Go which will still run in all browsers. ### What's new? - 2021-04-04: **Go 1.16 is now officially supported!** 🎉 🎉 🎉 ### Playground Give GopherJS a try on the [GopherJS Playground](http://gopherjs.github.io/playground/). ### What is supported? Nearly everything, including Goroutines ([compatibility documentation](https://github.com/gopherjs/gopherjs/blob/master/doc/compatibility.md)). Performance is quite good in most cases, see [HTML5 game engine benchmark](https://ajhager.github.io/engi/demos/botmark.html). Cgo is not supported. ### Installation and Usage GopherJS [requires Go 1.16 or newer](https://github.com/gopherjs/gopherjs/blob/master/doc/compatibility.md#go-version-compatibility). If you need an older Go version, you can use an [older Gopher release](https://github.com/gopherjs/gopherjs/releases). Get or update GopherJS and dependencies with: ``` go get -u github.com/gopherjs/gopherjs ``` If your local Go distribution as reported by `go version` is newer than Go 1.16, then you need to set the `GOPHERJS_GOROOT` environment variable to a directory that contains a Go 1.16 distribution. For example: ``` go get golang.org/dl/go1.16.3 go1.16.3 download export GOPHERJS_GOROOT="$(go1.16.3 env GOROOT)" # Also add this line to your .profile or equivalent. ``` Now you can use `gopherjs build [package]`, `gopherjs build [files]` or `gopherjs install [package]` which behave similar to the `go` tool. For `main` packages, these commands create a `.js` file and `.js.map` source map in the current directory or in `$GOPATH/bin`. The generated JavaScript file can be used as usual in a website. Use `gopherjs help [command]` to get a list of possible command line flags, e.g. for minification and automatically watching for changes. `gopherjs` uses your platform's default `GOOS` value when generating code. Supported `GOOS` values are: `linux`, `darwin`. If you're on a different platform (e.g., Windows or FreeBSD), you'll need to set the `GOOS` environment variable to a supported value. For example, `GOOS=linux gopherjs build [package]`. *Note: GopherJS will try to write compiled object files of the core packages to your $GOROOT/pkg directory. If that fails, it will fall back to $GOPATH/pkg.* #### gopherjs run, gopherjs test If you want to use `gopherjs run` or `gopherjs test` to run the generated code locally, install Node.js 10.0.0 (or newer), and the `source-map-support` module: ``` npm install --global source-map-support ``` On supported `GOOS` platforms, it's possible to make system calls (file system access, etc.) available. See [doc/syscalls.md](https://github.com/gopherjs/gopherjs/blob/master/doc/syscalls.md) for instructions on how to do so. #### gopherjs serve `gopherjs serve` is a useful command you can use during development. It will start an HTTP server serving on ":8080" by default, then dynamically compile your Go packages with GopherJS and serve them. For example, navigating to `http://localhost:8080/example.com/user/project/` should compile and run the Go package `example.com/user/project`. The generated JavaScript output will be served at `http://localhost:8080/example.com/user/project/project.js` (the .js file name will be equal to the base directory name). If the directory contains `index.html` it will be served, otherwise a minimal `index.html` that includes `<script src="project.js"></script>` will be provided, causing the JavaScript to be executed. All other static files will be served too. Refreshing in the browser will rebuild the served files if needed. Compilation errors will be displayed in terminal, and in browser console. Additionally, it will serve $GOROOT and $GOPATH for sourcemaps. If you include an argument, it will be the root from which everything is served. For example, if you run `gopherjs serve github.com/user/project` then the generated JavaScript for the package github.com/user/project/mypkg will be served at http://localhost:8080/mypkg/mypkg.js. #### Environment Variables There is one GopherJS-specific environment variable: - `GOPHERJS_GOROOT` - if set, GopherJS uses this value as the default GOROOT value, instead of using the system GOROOT as the default GOROOT value - `GOPHERJS_SKIP_VERSION_CHECK` - if set to true, GopherJS will not check Go version in the GOROOT for compatibility with the GopherJS release. This is primarily useful for testing GopherJS against unreleased versions of Go. ### Performance Tips - Use the `-m` command line flag to generate minified code. - Apply gzip compression (https://en.wikipedia.org/wiki/HTTP_compression). - Use `int` instead of `(u)int8/16/32/64`. - Use `float64` instead of `float32`. ### Community - [#gopherjs Channel on Gophers Slack](https://gophers.slack.com/messages/gopherjs/) (invites to Gophers Slack are available [here](http://blog.gopheracademy.com/gophers-slack-community/#how-can-i-be-invited-to-join:2facdc921b2310f18cb851c36fa92369)) - [Bindings to JavaScript APIs and libraries](https://github.com/gopherjs/gopherjs/wiki/bindings) - [GopherJS Blog](https://medium.com/gopherjs) - [GopherJS on Twitter](https://twitter.com/GopherJS) ### Getting started #### Interacting with the DOM The package `github.com/gopherjs/gopherjs/js` (see [documentation](https://godoc.org/github.com/gopherjs/gopherjs/js)) provides functions for interacting with native JavaScript APIs. For example the line ```js document.write("Hello world!"); ``` would look like this in Go: ```go js.Global.Get("document").Call("write", "Hello world!") ``` You may also want use the [DOM bindings](http://dominik.honnef.co/go/js/dom), the [jQuery bindings](https://github.com/gopherjs/jquery) (see [TodoMVC Example](https://github.com/gopherjs/todomvc)) or the [AngularJS bindings](https://github.com/wvell/go-angularjs). Those are some of the [bindings to JavaScript APIs and libraries](https://github.com/gopherjs/gopherjs/wiki/bindings) by community members. #### Providing library functions for use in other JavaScript code Set a global variable to a map that contains the functions: ```go package main import "github.com/gopherjs/gopherjs/js" func main() { js.Global.Set("pet", map[string]interface{}{ "New": New, }) } type Pet struct { name string } func New(name string) *js.Object { return js.MakeWrapper(&Pet{name}) } func (p *Pet) Name() string { return p.name } func (p *Pet) SetName(name string) { p.name = name } ``` For more details see [Jason Stone's blog post](http://legacytotheedge.blogspot.de/2014/03/gopherjs-go-to-javascript-transpiler.html) about GopherJS. ### Architecture #### General GopherJS emulates a 32-bit environment. This means that `int`, `uint` and `uintptr` have a precision of 32 bits. However, the explicit 64-bit integer types `int64` and `uint64` are supported. The `GOARCH` value of GopherJS is "js". You may use it as a build constraint: `// +build js,-wasm`. #### Application Lifecycle The `main` function is executed as usual after all `init` functions have run. JavaScript callbacks can also invoke Go functions, even after the `main` function has exited. Therefore the end of the `main` function should not be regarded as the end of the application and does not end the execution of other goroutines. In the browser, calling `os.Exit` (e.g. indirectly by `log.Fatal`) also does not terminate the execution of th
评论
    相关推荐
    • html5
      NULL 博文链接:https://buptmax.iteye.com/blog/779088
    • HTML5详解 Html5实战
      HTML5详解 Html5实战 Demos 适合继续充电的开发人员
    • swim.html:http
      swim.html 来源
    • HTML5 知识
      NULL 博文链接:https://yanguz123.iteye.com/blog/2149007
    • html5_source
      this is for the html5 what is the source
    • Lingulo-Responsive-Tutorial:httpHTML5自适应网站教程
      HTML5网站是Christoph Anastasiades创建HTML5 / CSS3教程的一部分( )随意使用用于您的个人或商业项目和/或以您喜欢的任何方式进行更改。 如果您在网站上的某处放置了指向的链接以支持我的工作,我将很高兴。 ...
    • html5电子签名
      资源的js插件来自于,自己做了一些改动,完美支持移动端的签名 http://www.htmleaf.com/
    • html5 boilerplate 4.3.0
      html5 boilerplate 4.3.0
    • HTML5-Examples:httpHTML 5示例-html source website
      HTML5-示例 HTML 5示例。 版权所有2012:SKJ Technologies Private Ltd 这些示例已根据“知识共享署名-相同的ShareAlike 3.0未移植”(CC BY-SA 3.0)许可证进行共享。 有关CC BY-SA 3.0许可证的更多详细信息,请...
    • HTML5图片展示
      这是一个关于html5的图片展示的网页及其代码