golang可以写前端,你澡吗?

jinlong0326 · · 10782 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

引入:GopherJS:Go代码转为JS,在浏览器中运行Go代码(公司群发的,感觉有意思就随意写了2行。)

以下文章转载:

GopherJS 可以把 Go 代码编译成纯 JS 代码。其主要目的是让你有机会用 Go 语言编写前端代码,并且可以运行在所有浏览器中。可以到这里试试 GopherJS Playground

有了这个东东,你可利用 Go的优雅的类型系统和其他编译时(compile-time)检查,尤其是对大型项目,在Bug侦测有重大影响、有重构的能力。想想看, JS 方法是不是要经常要额外处理一些遗留参数,因为你并不确切知道其他某些代码是不是仍然在按老方法调用。如果没调用,GopherJS 会告诉你,你就可以确信和这样的Bug说拜拜了。

设计目标

  • 生成代码的性能 (查看  Joseph Hager 的 《HTML5 游戏引擎评测》)
  • similarity between Go code and generated JavaScript code for easier debugging
  • 兼容现有的库(查看这个列表:indings to JavaScript APIs and libraries
  • 生成代码的体积小

支持哪些?

几乎所有,包括 Goroutines。欲知详情,请查看这个兼容表

测试以下代码:

package main

import (
	"fmt"
	"github.com/gopherjs/gopherjs/js"
)
func someFunction() {
  println("Hello, JS someFunction")
}
func main() {
	fmt.Println("Hello, playground")
	js.Global.Call("alert", "Hello, JavaScript")
	println("Hello, JS console")
	js.Global.Set("myLibrary", map[string]interface{}{
    	   "someFunction": someFunction,
  	})
  	println(js.Global.Get("myLibrary"));
  	js.Global.Get("myLibrary").Call("someFunction");
  }

这里主要
js.Global.Get("doc").Call("func", argument ...interface{}) 
获取window下的变量
var go$global;
if (typeof window !== "undefined") {
	go$global = window;
} else if (typeof GLOBAL !== "undefined") {
	go$global = GLOBAL;
}

只要获取到对象 set扩展属性 get获取对象。Call 调用 是不是有点 func.call|apply 的感觉。挺赞的。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:jinlong0326

查看原文:golang可以写前端,你澡吗?

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

10782 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
1 回复  |  直到 2000-01-01 00:00:00
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传