這個例子中,我們定義了三個匿名函式。第一個是最基礎的形式,沒有參數和返回值。第二個帶有參數 x 和 y,並在呼叫時提供了這些參數的值。第三個例子展示了閉包的概念,其中匿名函式可以訪問其外部作用域中的變數 zpackage mainimport "fmt"func main() { // 這是一個簡單的匿名函式 func() { fmt.Println("這是一個匿名函式!") }() // 注意最後的 (),這是用來呼叫這個匿名函式的 // 匿名函式也可以接受參數 func(x int, y int) { fmt.Println(x + y) }(3, 4) // 輸出 7 // 閉包:匿名函式可以存取外部的變量 z := 10 f := func() { fmt.Println(z) } ...
Concurrency in go 讀書心得 2.Concurrency ? Parallelism?
Concurrency 與 Parallelism 的深入探討:從差異到應用我們常常聽到兩個詞:Concurrency(併發)與 Parallelism(平行)。儘管這兩個詞語經常被交替使用,但它們代表的概念是有所不同的。理解這兩者的差異不僅有助於技術深入,還有助於我們在設計和開發時做出明智的選擇。本文將試圖剖析這兩者的核心差異,並提供一些應用的例子。1. Concurrency(併發)Concurrency主要關心的是多個任務可以在同一時間段內被啟動或完成,但並不意味著這些任務是同時執行的。它是一種如何結構化程序、算法,以便有效地處理多件事情,這些事情可能(但不必)在同一時間發生。舉個例子,一位雜技演員正在同時擲多個球,儘管每次只接觸一個球,但對觀眾來說,似乎球都在「同時」被擲。這就是concurrency的概念:雖然一次只處理一件事,但在整個過程中處理了多件事情。2. Parallelism(平行)平行則是指多個任務或計算過程在同一時刻真正同時進行。這通常需要多個處理器或核心,或者是分佈式的系統。再次以例子來說明:想象一個跑道,有四名運動員同時起跑,他們同時向終點前進。這是真正的「同時」,每個運動員的跑動都是同時發生的,而不是輪流。併發與平行的關聯這兩者之間的關係是密不可分的。併發可以在單核系統中實現,切換上下文以模擬多個任務「似乎」同時運行。然而,當有多核或多處理器可用時,併發任務也可能平行運行。舉例說明,當我們開啟多個網頁標籤時,這些標籤可能是併發加載的,但若我們的系統有多個核心,則可能會有多個標籤同時加載,達到平行。結論Concurrency...
Concurrency in go 讀書心得 1.前言
動機:希望加深對於golang concurrency的理解去年,我也報名了ithome鐵人賽。當初帶著滿腔熱誠,想要透過連續的寫作分享知識。然而,生活總是充滿了變數。原以為能夠穩定發文的計畫,因為突然需要跟主管一起出差一週而被打破。但,過去就是過去,我認為最重要的是如何從過去的經驗中學習,並將之轉化為未來更強烈的動力。因此,今年我決定再度參賽,但這次的目標更加明確:對Go語言的併發(Concurrency)進行深入探討。選擇這個主題,背後有兩大原因。首先,併發是Go語言中非常強大,但也相對複雜的特性。我深知為了真正理解一個技術,最好的方法就是教學以致用,透過撰寫系列文章的方式,透過將知識傳達給他人,同時鞏固自己的認知。這次的寫作,我主要參考了一本名為《Concurrency in Go》的書籍。這本書深入淺出地探討了Go語言中併發的相關知識。我會將這些知識與心得整理成文章分...
Websocket連線
WebSocket 是一個先進的技術,允許在用戶端和伺服器之間建立互動式通訊會話。以下是 WebSocket 在實際使用上的優點:1. **雙向通信**: WebSocket 提供了全雙工的通信管道。這意味著伺服器和客戶端都可以同時發送和接收資料,而不需要等待對方完成。 2. **即時性**: 因為它是一個持久的連接,所以資料可以立即無延遲地傳輸。 3. **減少網絡流量**: 與傳統的 HTTP 請求相比,WebSocket 不需要每次交換數據都發送完整的 HTTP 頭部資料,這可以減少不必要的帶寬使用和延遲。 4. **低延遲**: WebSocket 適合於需要低延遲的應用,例如遊戲、財經交易平台或實時訊息系統。 5. **持久的連接**: 一旦 WebSocket 連接建立,它將保持打開狀態,直到客戶端或伺服器決定關閉它。這與傳統的...
Byte Code in Java

位元碼(Byte Code)位元碼可以定義為編譯器在編譯源代碼(Java 程式)後生成的中間碼。位元碼是如何生成的?Compiler(編譯器)將源代碼或 Java 程式轉換為位元碼(或機器碼),然後解譯器在系統上執行位元碼。解譯器也可以稱為 Java 虛擬機(JVM)。位元碼是編譯器(生成位元碼)和解譯器(執行位元碼)之間的共同部分。例如假設您正在撰寫您的第一個 Java 程式。/*package whatever */import java.io.*; class GFG { public static void main (String[]...
Java stack, heap
在 Java 中,Stack(堆疊)和 Heap(堆)是兩個不同的記憶體區域,用於存儲程式執行時的不同類型資料。Stack(堆疊):1. Stack 是一個有限的區域,用於存儲方法的執行上下文和本地變數。2. 每個執行緒在運行時都有自己的 Stack。3. Stack 中的資料是按照 Last-In-First-Out(後進先出)的順序操作的。4. 堆疊的記憶體管理由 JVM 自動處理,不需要開發人員手動釋放記憶體。5. 在方法調用時,方法的參數、局部變數和方法返回地址等資訊都存儲在 Stack 中。6. 方法的堆疊框架(Stack Frame)被創建和銷毀,以支援方法的執行。ps:方法返回地址是指當一個方法執行完畢後,程式需要知道要返回到哪個位置繼續執行。在方法調用期間,當遇到一個方法呼叫,程式會將該方法的返回地址(也稱為返回位址或返回目標)存儲在堆疊中。例如以下程式碼public class...
封裝,繼承,多型
當談到物件導向程式設計中的封裝、繼承和多型時,可以使用現實生活中的動物類別作為例子來解釋。1. 封裝(Encapsulation):封裝是指將資料(屬性)和方法(行為)封裝在一個物件中,只對外部提供必要的接口以便存取和使用。舉例來說,假設我們有一個動物類別,稱為Animal。Animal類別中包含屬性(例如名字、年齡)和方法(例如發出聲音)。這些屬性和方法被封裝在Animal物件中,只有通過公開的介面(例如方法)才能存取和操作。public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public...
訂閱:
文章 (Atom)