在 Golang 中使用選擇語句時需要了解的案例

在Go語言中,select語句類似於switch語句,但是select語句中的case語句指的是通信,即在channel上進行發送或者接收操作。

在 Golang 中使用選擇語句時需要了解的案例

句法:

select{

case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh

在本文中,我們將學習如何使用預設情況來避免死鎖。但首先,讓我們先了解一下使用Golang select 指令時出現死鎖的情況是什麼?

關於 Golang 中死鎖案例你需要知道的事情

死鎖:當您嘗試從通道讀取或寫入資料但通道為空時。因此它會阻塞當前 goroutine 的執行並將控制權交給其他 goroutine,但如果沒有其他 goroutine 可用或其他 goroutine 由於這種情況而處於休息狀態,程式就會崩潰。這種現象稱為死鎖。如下例所示:

例如:

// Chương trình Go minh hoạc
// cách deadlock phát sinh
package main 

// Hàm chính
func main() { 

	// Tạo một kênh
	// Deadlock phát sinh bởi
	// không có goroutine đang viết
	// vào kênh này, vì thế
	// lệnh select đã bị khóa mãi mãi
	c := make(chan int) 
	select { 
	case <-c: }="" }="">

結果:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()

為了避免這種情況,我們在 select 語句中使用預設情況。也就是說,當程式出現死鎖時,會執行select語句的default case,以避免死鎖。如下例所示,我們在 select 語句中使用預設情況來避免死鎖。

例如:

// Chương trình Go minh họa cách giải quyết
// vấn đề deadlock bằng case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo 1 kênh
	c := make(chan int) 
	select { 
	case <-c: default:="" fmt.println("!..="" default="" case..!")="" }="" }="">

結果:

!.. Default case..!

當select語句只有一個nil channel時,您也可以使用預設情況。如下例所示,channel c 為 nil,所以會執行 default case,如果這裡的 default case 不可用,那麼程式就會一直阻塞,出現死鎖。

例如:

// Chương trình Go minh họa
// chạy case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo một kênh
	var c chan int

	select { 
	case x1 := <-c: fmt.println("value:="" ",="" x1)="" default:="" fmt.println("default="" case..!")="" }="" }="">

結果:

Default case..!
Sign up and earn $1000 a day ⋙

Leave a Comment

Go 中的關鍵字

Go 中的關鍵字

關鍵字-關鍵字是語言中用於某些內在過程或代表某些預定義動作的字詞。以下是您需要了解的有關 Golang 中的關鍵字的知識。

Golang中的資料類型

Golang中的資料類型

資料類型指定有效的 Go 變數可以包含的資料類型。 Go語言中,類型分為以下四類:

Golang 中的函數參數

Golang 中的函數參數

Go 支援兩種主要的傳遞參數的方式:按值傳遞和按引用傳遞。 Go 預設使用按值傳遞。

Golang中傳回多個值的函數

Golang中傳回多個值的函數

在Go語言中,允許使用return語句從函數傳回多個值。換句話說,在函數中,一個return語句可以傳回多個值。

Go 中的 Switch 語句

Go 中的 Switch 語句

Golang 和大多數其他程式語言一樣,有 switch 語句。以下是如何在 Golang 中使用 switch 語句。

Golang 中的匿名結構和字段

Golang 中的匿名結構和字段

Golang 中的匿名結構是沒有名稱的一次性臨時結構,而匿名欄位允許嵌入未命名的欄位。

如何在 Golang 中使用 Rune

如何在 Golang 中使用 Rune

Golang 中的 Runes 是什麼?如何在 Golang 中使用 Rune?文章會告訴你答案。

如何在 Golang 中使用運算符

如何在 Golang 中使用運算符

運算符允許我們對操作數執行不同類型的操作。在 Go語言中,運算子可以根據其不同的功能進行分類。

Golang 中的 Void 標識符

Golang 中的 Void 標識符

Golang 中的 _(底線)稱為空白標識符。標識符是程式組件的使用者定義名稱,用於識別目的。

如何用 Golang 創建基本程序

如何用 Golang 創建基本程序

你好世界!是任何程式語言中的第一個基本程式。您可以按照以下步驟使用 Golang 編寫第一個程式。

如何在 Windows 上安裝 Go

如何在 Windows 上安裝 Go

Golang 可以輕鬆安裝在 Windows 上。以下是在 Windows 上安裝 Golang 的詳細逐步指南。

Golang 中同名的方法

Golang 中同名的方法

Golang允許在同一個套件中建立兩個或多個同名的方法,但是這些方法的接收者必須是不同的類型。

Go 中的函數

Go 中的函數

在 Go 中,函數是執行特定任務的程式碼區塊,可以在整個程式中重複使用以節省記憶體、提高可讀性並節省時間。

Go 中的變數作用域

Go 中的變數作用域

Golang 中變數的範圍決定了程式中可存取該變數的部分。在 Go 中,所有標識符都有一個在編譯時確定的詞法作用域。

為什麼要單膝跪地求婚?

為什麼要單膝跪地求婚?

中世紀的騎士(以及《權力的遊戲》中的瓊恩·雪諾)以跪姿而聞名,這可能影響了今天的求婚方式。這就是為什麼男人要單膝跪地向女友求婚。

正向的引言、快樂的狀態、簡短的樂觀和正向的狀態

正向的引言、快樂的狀態、簡短的樂觀和正向的狀態

哪種開朗樂觀的狀態最能幫助您振奮精神?文章將為你總結一些簡短、有意義、快樂、樂觀的狀態,讓你快速恢復精神。

維生素 B12 缺乏的健康風險

維生素 B12 缺乏的健康風險

您的紅血球、神經和大腦都依賴維生素 B12。但有些人攝取的這種營養素不足,維生素 B12 缺乏會導致許多健康問題。

如果每天都戴胸罩,你的身體會發生什麼變化?

如果每天都戴胸罩,你的身體會發生什麼變化?

除了為您的服裝提供基礎並讓您看起來更漂亮之外,胸罩還可以透過其他多種方式為您帶來好處。

ChatGPT 全球崩潰

ChatGPT 全球崩潰

11月22日上午,OpenAI的ChatGPT聊天機器人出現大面積問題,全球眾多用戶無法使用這款AI應用。

如何使用WiFi分析儀來提升您的Wi-Fi連接

如何使用WiFi分析儀來提升您的Wi-Fi連接

僅僅購買新的 Wi-Fi 路由器並不足以增強您的網路。為了充分利用您的 Wi-Fi,您需要確保獲得最佳的範圍、訊號和頻率。

身體與我們溝通的方式常常被忽視

身體與我們溝通的方式常常被忽視

我們的身體就像機器,不斷發出訊號和訊息,但我們很少注意它們。讓我們看看我們的身體想透過下面的訊號告訴我們什麼。

世界上最高的陸地動物

世界上最高的陸地動物

世界上最高的動物是?本文將為您總結陸地上最大的動物。

計算機中的基本測量單位

計算機中的基本測量單位

位元 (Bit) 是二進位數字 (Binary Digit) 的縮寫,是電腦記憶體中最小單位的術語,可以儲存兩種資訊狀態之一:0 或 1(可以理解為電腦中電晶體的開啟或關閉狀態)。

如何利用提醒功能改善你的筆記習慣

如何利用提醒功能改善你的筆記習慣

良好的記憶習慣始於提醒——它們在正確的時間出現,捕捉那些轉瞬即逝的想法。

7 款免費應用,幫助你瞬間提升手機拍照質量

7 款免費應用,幫助你瞬間提升手機拍照質量

仍有許多免費且功能強大的攝影工具可用於增強您的照片。

讓 Google 搜尋小工具更實用的技巧

讓 Google 搜尋小工具更實用的技巧

Google 搜尋小工具可讓您快速存取 Google 搜尋和發現提要,以及語音搜尋和 Google Lens。

如何登入並關閉密碼過期提醒

如何登入並關閉密碼過期提醒

如果您在 Windows 登入畫面上看到「您的密碼已過期,必須變更」訊息,這是因為 Windows 本機帳戶的密碼預設每 42 天過期一次。

如何在 Chrome、Coc Coc 上將 WebP 圖片轉換為 PNG、JPG

如何在 Chrome、Coc Coc 上將 WebP 圖片轉換為 PNG、JPG

要將 WebP 圖像轉換為 PNG 和 JPG 格式,我們可以透過多種不同的方式來完成,例如直接在圖像 URL 上進行轉換或使用圖像轉換工具。

ChatGPT 畫布模式的 4 種使用方法

ChatGPT 畫布模式的 4 種使用方法

ChatGPT 的新 Canvas 模式為世界領先的生成式 AI 引擎中的寫作和編輯增添了新的維度。