GopherJS

Go+ 在线运行

那年仲夏 提交于 2020-07-28 05:51:54
Go+ Playground 分为两个版本,一个 基于 Docker ,在服务端编译执行 Go+ 代码;另一版本 基于 GopherJS ,其直接在前端编译执行 Go+ 代码。 https://qiniu.github.io/ https://play.goplus.org/ 来源: oschina 链接: https://my.oschina.net/itfanr/blog/4328068

vecty vstore 学习

拥有回忆 提交于 2019-12-01 13:14:48
vstore 是用于 vecty 框架的类似 redux 的状态管理库。 安装 go get marwan.io/vstore 代码仓库: https://github.com/marwan-at-work/vstore 定义 action 一般使用结构定义,比如 type Increment struct{} 和 type AddTodo struct { Id int Text string } 定义 state 和 reducer 比如 todo app 的 state 定义 type State struct { Todos []*Todo Filter Filter } 要实现 vstore.Reducer 接口,比如 func (s *State) Reduce(action interface{}) { switch a := action.(type) { case *AddTodo: s.Todos = append(s.Todos, &Todo{ Id: a.Id, Completed: false, Text: a.Text, }) case *SetVisibilityFilter: s.Filter = a.Filter case *ToggleTodo: println("reduce toggle todo:", a.Id) for _, todo :

gopherjs 与 echo 配合

限于喜欢 提交于 2019-12-01 13:14:27
gopherjs 是把 go 转换为 js 的工具,echo 是 go 的 web 框架。 echo 官网: https://echo.labstack.com 使用 gopherjs serve 在 localhost:8080 开启服务,然后运行下面的 go 代码,它使用 echo 框架在 localhost:1323 开启服务,里面的逻辑是把非 /api 路径的请求都反向代理到 gopherjs 在 8080 端口提供的服务,只有路径为 /api 的请求,跳过代理,由自己处理。这样可以实现在同一个端口(同一个域)下提供 api 接口和 js 等静态文件,而不需要让服务器允许 api 接口的跨域访问。 package main import ( "net/http" "net/url" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) func main() { e := echo.New() // middleware e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Use(middleware.Gzip()) e.GET("/api", func(c echo.Context) error { return c.String

go 前端框架 vecty 学习

∥☆過路亽.° 提交于 2019-12-01 13:13:38
gopherjs 是把 go 编译为 js 的工具。 vecty 是基于 gopherjs 的一种类似 React 的开发框架。 安装 gopherjs 和 vecty go get -u github.com/gopherjs/gopherjs go get -u github.com/gopherjs/vecty vecty 自带的例子在 example 目录,有 todomvc 和 markdown 编辑器。 简单的例子 package main import ( "strconv" v "github.com/gopherjs/vecty" "github.com/gopherjs/vecty/elem" "github.com/gopherjs/vecty/event" ) func main() { v.SetTitle("title message swt") v.RenderBody(&MyComponent{}) } type MyComponent struct { v.Core btnCount int } func (mc *MyComponent) onButtonClick(e *v.Event) { println("click my component button") mc.btnCount++ v.Rerender(mc) } func (mc

gopherjs xhr 学习

Deadly 提交于 2019-11-30 08:16:55
gopherjs 生态里有 XMLHttpRequest 的包装 honnef.co/go/js/xhr 库( 项目地址 , 文档 ) XMLHttpReqeust 文档 例子 package main import ( "github.com/gopherjs/gopherjs/js" "honnef.co/go/js/xhr" ) type Reply struct { *js.Object Headers map[string]string `js:"headers"` } func main() { req := xhr.NewRequest("GET", "http://httpbin.org/get") req.ResponseType = "json" err := req.Send(nil) if err != nil { println("err:", err) return } if req.Status != 200 { println("err:", req.StatusText) return } println(req.Response) reply := &Reply{Object: req.Response} ua := reply.Headers["User-Agent"] println("UA:", ua) } 通过 xhr