Go Play 里面支持时间,就能写出动画了。。

sunfmin · December 13, 2012 · Last by kevin__liu replied at December 18, 2012 · 3555 hits

啥原理啊

#3 楼 @huacnlee 不晓得怎么搞的。。没看到 websocket 什么的

#4 楼 @sunfmin #3 楼 @huacnlee 这跟 websocket 有什么关系啊,就是基本的打印字符串。关键是每一轮打印的时候先输入 \x0c,也就是换页,所以每一轮打印都是一个页面,但是在原来位置,看上去就是动画了

#5 楼 @yedingding 那前台怎么显示后台的内容的?而且不是一次性显示的,肯定是要不断传过来?

#6 楼 @sunfmin 内容不是字符串吗,只不过位置在变,你说的后台内容是啥

我研究了一下相关 js,不知道分析对不对:

  1. http://play.golang.org/static/playground.js 主要由这个 js 去后台通讯;
  2. 点 Run 的时候用 ajax 要求后台编译且执行代码(这个执行应该用的一个特殊执行环境,因为不管 time.Sleep 多久,都必须马上跑完整个结果);
  3. 后台把执行后的信息以一个 json 发到前台;
  4. 前台再根据 json 的内容打印字符,json 中有相应的 delay 信息,这样就有了动画;

json 数据参考:

{"Errors":"","Events":[

{"Message":"\u000c","Delay":0},{"Message":" * * \n","Delay":0},{"Message":" * \n","Delay":0},{"Message":" \n","Delay":0},{"Message":" \n","Delay":0},{"Message":" ** \n","Delay":0},{"Message":" * \n","Delay":0},{"Message":" * \n","Delay":0},{"Message":" * \n","Delay":0},{"Message":" * * \n","Delay":0},{"Message":" \n","Delay":0},{"Message":"\u000c","Delay":50000000},

..............

{"Message":" * \n","Delay":0},{"Message":" \n","Delay":0}]}

You need to Sign in before reply, if you don't have an account, please Sign up first.