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
- 11g新特性--invisible indexIndex
- 11g新特性: 索引不可見(Index Invisible)索引Index
- 這可能是最容易理解的 Go Mutex 原始碼剖析GoMutex原始碼
- 為什麼我最喜歡的程式語言是 GoGo
- CSS三個非常重要的特性分享!CSS
- Go 1.13 新特性Go
- Python中XGBoost的特性重要性和特性選擇Python
- Invisible IndexIndex
- Go 1.12 版本的新特性Go
- 業務重要?還是技術重要?
- Go 快速指南:go1.18 特性Go
- [譯]Go 1.8 新特性Go
- 可能是世界上最簡單的用 Go 來寫 WebAssembly 的教程GoWeb
- Go 1.5的併發特性與案例Go
- index , virtual , invisibleIndex
- 三,ES6中需要注意的特性(重要)
- Go中使用Zap日誌庫與Lumberjack日誌切割Go
- Go 語言的 4 個特性改動Go
- Go的一些特性 未完待續Go
- 資訊化解決方案,到底是工具重要還是規劃重要?
- 做FMEA,到底是方法論重要?還是技術重要?
- 路由器協議最為重要的種類路由器協議
- CRM客戶管理系統的五大重要特性
- 演算法還是最重要的演算法
- 思考環境是最重要的 (轉)
- Twist Image:最願意點選的廣告的特性
- ES2022 中的4個最重要的特性
- 10G: 為DBA 提供的最重要的 20 個新特性
- 網友:Go 你是 Google 的,Go:我不是Go
- 【Go進階—基礎特性】介面Go
- 【Go進階—基礎特性】deferGo
- 【Go進階—基礎特性】反射Go反射
- 玩遊戲顯示卡重要還是CPU重要?CPU散熱風冷還是水冷好?遊戲
- 如何做一個優秀的專案經理|你最討厭的寫文件其實是最重要的
- go演示工具 - go 社群是如何做演示的?Go
- Java 8 的重要新特性以及 Java 9、10 的發展規劃Java
- 最權威的 Android Oreo 新特性詳解Android