Go最重要的特性是invisible - Jack
當被問及 Go 最重要的特性時,許多人會談論 Go 的簡單性、C 互操作性、編譯速度等。
然而,Go 的最佳特性是在同步介面中編寫非同步程式碼的能力。
作者給出了一個在 Go 與 Java 中發出的 HTTP 請求的示例,以展示 Go 如何非常有效地排程工作。
Go程式碼:
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, "Goodbye, World!") }) log.Fatal(http.ListenAndServe(":8080", nil)) } |
上述Go 標準執行時允許非同步編碼,同時允許開發人員使用簡單的同步介面。但由於它是標準 Go 執行時的一部分,因此它是不可見的invisible 。
為了更好地突出該特性,讓我們看一個用 Java 編寫的類似程式碼的示例。
import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; public class HelloWorld { public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); server.createContext("/", new MyHandler()); server.setExecutor(null); // creates a default executor server.start(); } static class MyHandler implements HttpHandler { @Override public void handle(HttpExchange t) throws IOException { String response = "Goodbye, World!"; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); } } } |
為了使這個程式碼和 Go 程式碼一樣好,你需要做很多額外的工作。
我正在談論的特性是阻塞 goroutine 的 Go 執行時處理。當我第一次開始使用 Go 時,我認為 goroutines 是 Java 的綠色執行緒上更有效的變體,但是當我編寫看起來像傳統阻塞 I/O 的程式碼時,它從未意識到它實際上更類似於非同步 I/O . 很明顯,在進行阻塞呼叫時,Go 能夠更有效地安排工作。要從 Java 中獲得這種效能,您需要新增執行緒池、future或其他一些非同步庫。
效能測試結果:Java 版本每秒達到約 21K 請求,而 Go 版本每秒達到約 36K 請求。
相關文章
- MySQL 8 新特性之Invisible IndexesMySqlIndex
- Python中XGBoost的特性重要性和特性選擇Python
- Go 1.12 版本的新特性Go
- CSS三個非常重要的特性分享!CSS
- 這可能是最容易理解的 Go Mutex 原始碼剖析GoMutex原始碼
- Go 快速指南:go1.18 特性Go
- Go 1.13 新特性Go
- ES2022 中的4個最重要的特性
- Some ideas About ‘invisible bug‘Idea
- 三,ES6中需要注意的特性(重要)
- 對話OpenAI Jack Clark:中國是人工智慧領域的領軍者OpenAI人工智慧
- oracle invisible index與unusable index的區別OracleIndex
- 可能是世界上最簡單的用 Go 來寫 WebAssembly 的教程GoWeb
- Go 語言的 4 個特性改動Go
- Go的一些特性 未完待續Go
- CRM客戶管理系統的五大重要特性
- 業務重要?還是技術重要?
- 做FMEA,到底是方法論重要?還是技術重要?
- Go1.18 新特性:新增好用的 Cut 方法Go
- Go 1.18 中即將出現的功能特性Go
- 疫情當前 網路安全更重要——IPSG特性
- 【Go進階—基礎特性】反射Go反射
- 【Go進階—基礎特性】deferGo
- 【Go進階—基礎特性】介面Go
- Oracle資料庫中的不可見索引 invisible indexOracle資料庫索引Index
- 【譯】Visual Studio 17.8 中我最喜歡的特性
- 最清晰易懂的 Go WaitGroup 原始碼剖析GoAI原始碼
- 資訊化解決方案,到底是工具重要還是規劃重要?
- Jack's側方移位全攻略
- JRPG結構設計思考——“故事”很重要,但最重要的是“扮演”
- Go型別特性-學習筆記Go型別筆記
- 【Go進階—基礎特性】錯誤Go
- 網友:Go 你是 Google 的,Go:我不是Go
- Jack整理的Win32彙編基礎知識Win32
- Go1.18 新特性:引入新的 netip 網路庫Go
- 關於go的最熱門問題合集Go
- Go 最直接的debug 方式 輸出函式Go函式
- 走過最長的路是ChatGPT的套路,信過最真的話是Adobe的FireflyChatGPT