golang可以寫前端,你澡嗎?

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

引入: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 的感覺。挺贊的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.