Skip to main content

Command Palette

Search for a command to run...

Go是System Programming Language還是OOP?

Updated
2 min read

同步分享於MicroFIRE

什麼是System Programming Language

System Programming Language 主要用於底層系統開發,例如操作系統、系統工具、驅動程式等。這類語言具有以下特點:

  • 緊密地與硬體交互:系統程式語言可以直接訪問硬體資源,例如記憶體、CPU 和外部設備,使其更適合底層系統開發。

  • 更低的抽象層次:相比其他高階程式語言,系統程式語言設計時並沒有將底層細節過度隱層,因此開發者需要對底層硬體和系統有較深入的了解; 例如可以直接管理記憶體(malloc, free), 進行unsafe的指標操作等等的。

  • 高性能和高效率:由於系統程式語言通常具有較低的抽象層次,因此它們可以更有效地利用系統資源,達到更高的性能。

  • 程式碼可移植性:系統編程語言通常具有較高的可移植性,可以在不同平臺和操作系統上運行。

  • 程式設計風格:系統程式語言通常使用程序式(Procedural)或命令式(Imperative)程式風格,強調程序的流程和步驟。

常見的系統程式語言包括:C、C++、Rust 和 Go 等。這些語言在底層系統開發領域具有廣泛的應用,並且在性能和效率方面具有優勢。

什麼是Object-Oriented Programming

物件導向語言(Object-Oriented Programming)是一種程式設計風格,強調使用物件(或稱Class)來組織和執行程式。在物件導向語言中,開發者將資料(屬性)和可操作的方法封裝到物件中,這些物件間可以相互交互,以達到特定的任務。面向對象編程的主要特點包括:

  • 封裝性:物件將資料(屬性)和方法封裝在一起,可以控制對資料的訪問和修改(隱藏實踐細節),從而實現更好的安全性和可維護性。

  • 繼承性:物件可以通過繼承擴展其屬性和方法,減少程式碼的重複,提高程式碼的可重用性。

  • 多型性:同一個方法可以在不同物件上實現出不同的實際行為(Polymorphism)。

  • 抽象性:物件導向語言支持抽象類別和介面(一種本質/流程分類的呈現),可以提高程式的模組化和可重用性。

常見的物件導向語言包括 Java、C++、Python、C#、Ruby 等。這些語言通常提供了豐富的面向物件特性和方便使用的library,使開發者可以更方便地實現物件導向分析與設計(OOAD)。

Go

Is Go an OOP?

在Go doc中官方給出的回應

Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a different approach that we believe is easy to use and in some ways more general. There are also ways to embed types in other types to provide something analogous—but not identical—to subclassing. Moreover, methods in Go are more general than in C++ or Java: they can be defined for any sort of data, even built-in types such as plain, “unboxed” integers. They are not restricted to structs (classes).

Also, the lack of a type hierarchy makes “objects” in Go feel much more lightweight than in languages such as C++ or Java.

Go不完全滿足OOP喔!

沒類別繼承, 但我們可以透過embedding type(嵌入)的方法來做出有點點像"子"類別的東西.

但能透過Composition來讓interface來組合令一個interface.

但這都不是繼承!

多型性Polymorphism, Go在1.18以前完全不支援, 直到1.18開始才支援了基礎類型的Generic type. (FAQ連結); 為什麼不支援, 就是為了高性能(參考系統語言)

Go是系統程式語言?

是!

在FAQ中有一題問的是Go的祖先是誰?

Go is mostly in the C family (basic syntax), with significant input from the Pascal/Modula/Oberon family (declarations, packages), plus some ideas from languages inspired by Tony Hoare's CSP, such as Newsqueak and Limbo (concurrency). However, it is a new language across the board. In every respect the language was designed by thinking about what programmers do and how to make programming, at least the kind of programming we do, more effective, which means more fun.

接著來看看Go最初要解決Google在用C/C++構建分散式系統時的痛點

  • slow builds

  • uncontrolled dependencies

  • each programmer using a different subset of the language

  • poor program understanding (code hard to read, poorly documented, and so on)

  • duplication of effort

  • cost of updates

  • version skew

  • difficulty of writing automatic tools

  • cross-language builds

沒一點是為了要快速開發業務系統用的.

都是為了實踐現代化大型雲端原生系統而設計的語言.

Reference

Go at Google: Language Design in the Service of Software

Frequently Asked Questions (FAQ)

70 views

More from this blog

工程師的 Claude Code 實戰指南:從零開始到高效開發

工程師的 Claude Code 實戰指南:從零開始到高效開發 本文整合 Anthropic 官方 Best Practices 與社群實戰 Tips,帶你由淺入深掌握 Claude Code。 什麼是 Claude Code?為什麼值得學? 如果你還在用「複製程式碼貼到 ChatGPT,再複製答案貼回去」的工作流程,Claude Code 會讓你大開眼界。 Claude Code 是 Anthropic 推出的命令列工具,它直接活在你的 terminal 裡,能夠讀懂你的整個 codeb...

Feb 18, 20265 min read31
工程師的 Claude Code 實戰指南:從零開始到高效開發

工程師的 Claude Code 實戰指南:從零開始到高效開發

工程師的 Claude Code 實戰指南:從零開始到高效開發 本文整合 Anthropic 官方 Best Practices 與社群實戰 Tips,帶你由淺入深掌握 Claude Code。 什麼是 Claude Code?為什麼值得學? 如果你還在用「複製程式碼貼到 ChatGPT,再複製答案貼回去」的工作流程,Claude Code 會讓你大開眼界。 Claude Code 是 Anthropic 推出的命令列工具,它直接活在你的 terminal 裡,能夠讀懂你的整個 codeb...

Feb 18, 20265 min read26
工程師的 Claude Code 實戰指南:從零開始到高效開發

Claude Code 利用 Event-Driven Hooks 打造自動化開發大腦

在現代 AI 輔助開發中,我們不僅需要 AI 寫程式,更需要它懂規則、記性好,並且能自動處理那些繁瑣的雜事。透過 Claude Code Hooks 機制,我們可以介入 AI 的思考與執行迴圈,實現真正的「人機協作自動化」。 一、 動機與痛點:為什麼你需要介入 AI 的生命週期? 在預設狀態下,Claude Code 雖然強大,但它是「被動」且「無狀態」的,這導致了開發者常遇到以下痛點: 記憶重置 (Session Amnesia): 痛點:每次重啟終端機,AI 就像失憶一樣。 解法:你...

Jan 24, 20266 min read12
Claude Code 利用 Event-Driven Hooks 打造自動化開發大腦

剖析 OTel Collector Delta To Cumulative Processor

這篇筆記主要記錄我在研究 OpenTelemetry Collector Contrib 中 deltatocumulative Processor 的心得。除了基本的配置,我們直接從 Source Code 層級來看看它是怎麼運作的,特別是它在狀態管理上的設計,以及我們在生產環境踩過的那些「坑」。 1. 為什麼需要這個組件? 簡單來說,deltatocumulativeprocessor 的工作就是把 Delta (增量) 指標轉成 Cumulative (累積) 指標。 聽起來很簡單?但這是...

Jan 21, 20268 min read7
剖析 OTel Collector Delta To Cumulative Processor

Project Layout for Go

剛入門任何一門程式語言開發的人, 應該大多都是參考各路大神們的專案或者公司的專案在學習模仿。 一開始印入眼簾的應該就是 Project布局的各種長相, Project布局關心的是我們怎樣組織 Go project。 這裡針對的是資料夾跟檔案的布局,官方Blog Organizing a Go module這篇文章有給我們建議跟說明。讓我們一起讀這篇吧! 在閱讀這篇之前能先稍微理解Go Module以及Go install的用法。 官方Blog Organizing a Go module這篇文...

Oct 9, 20232 min read87
Project Layout for Go
B

BulldogBytes

8 posts