這是一個建立於
的文章,其中的資訊可能已經有所發展或是發生改變。
引入: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 mainimport ("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 的感覺。挺贊的。