Golangで選択文を使用する際に知っておくべきケース

Go 言語では、select 文は switch 文に似ていますが、select 文では case 文は通信、つまりチャネルでの送信または受信操作を指します。

Golangで選択文を使用する際に知っておくべきケース

構文:

select{

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

この記事では、デッドロックを回避するために default case を使用する方法を学習します。しかし、まず、 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 ステートメントで default ケースを使用します。つまり、プログラム内でデッドロックが発生した場合、デッドロックを回避するために、select ステートメントのデフォルト ケースが実行されます。以下の例のように、デッドロックを回避するために、select ステートメントで default ケースを使用します。

例えば:

// 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チャネルのみがある場合も、 default ケースを使用できます。以下の例に示すように、チャネル c は nil なので、ここでのデフォルト ケースが利用できない場合はデフォルト ケースが実行され、プログラムは永久にブロックされ、デッドロックが発生します。

例えば:

// 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 言語では、型は次の 4 つのカテゴリに分類されます。

Golangの関数の引数

Golangの関数の引数

Go は、引数を渡す方法として、値渡しと参照渡しという 2 つの主な方法をサポートしています。 Go では、デフォルトで値渡しが使用されます。

Golangで複数の値を返す関数

Golangで複数の値を返す関数

Go 言語では、return ステートメントを使用して関数から複数の値を返すことができます。つまり、関数では、 return ステートメントは複数の値を返すことができます。

GoのSwitch文

GoのSwitch文

Golang には他のほとんどのプログラミング言語と同様に switch ステートメントがあります。 Golang で switch ステートメントを使用する方法は次のとおりです。

Golang の匿名構造体とフィールド

Golang の匿名構造体とフィールド

Golang の匿名構造体は、1 回限りの目的で使用される名前のない一時的な構造体ですが、匿名フィールドでは名前のないフィールドを埋め込むことができます。

GolangでRuneを使う方法

GolangでRuneを使う方法

Golang におけるルーン文字とは何ですか? Golang で Rune を使用するにはどうすればいいですか?この記事でその答えがわかります。

Golangで演算子を使う方法

Golangで演算子を使う方法

演算子を使用すると、オペランドに対してさまざまな種類の演算を実行できます。 Go 言語では、演算子はさまざまな機能に基づいて分類できます。

Golang の void 識別子

Golang の void 識別子

Golang では _(アンダースコア) は空白識別子と呼ばれます。識別子は、識別目的で使用されるプログラム コンポーネントのユーザー定義名です。

Golangで基本的なプログラムを作成する方法

Golangで基本的なプログラムを作成する方法

こんにちは世界!あらゆるプログラミング言語における最初の基本プログラムです。この最初のプログラムは、以下の手順に従って Golang で記述できます。

WindowsにGoをインストールする方法

WindowsにGoをインストールする方法

Golang は Windows に簡単にインストールできます。以下は、Windows に Golang をインストールするための詳細なステップバイステップ ガイドです。

Golangにおける同じ名前のメソッド

Golangにおける同じ名前のメソッド

Golang では、同じパッケージ内に同じ名前のメソッドを 2 つ以上作成できますが、これらのメソッドのレシーバーは異なる型である必要があります。

Goにおける変数のスコープ

Goにおける変数のスコープ

Golang における変数のスコープは、その変数にアクセスできるプログラムの部分を決定します。 Go では、すべての識別子にはコンパイル時に決定される語彙スコープがあります。

Golang の制御文 (if、if-else、Nested-if)

Golang の制御文 (if、if-else、Nested-if)

Golang にはどのような条件文がありますか? Go プログラミングで条件文を使用するにはどうすればよいでしょうか?一緒に調べてみましょう!

折りたたみ式スマホの予想外の8つの大きなデメリット

折りたたみ式スマホの予想外の8つの大きなデメリット

折りたたみ式の携帯電話がかなりクールであることは否定できません。しかし、しばらく使用してみると、このデバイスにはいくつかの癖があることがわかりました。折りたたみ式スクリーンの携帯電話の予想外の 5 つの主な欠点をご紹介します。

AdobeはPremiere ProにAIビデオ作成技術を導入します

AdobeはPremiere ProにAIビデオ作成技術を導入します

Adobe は AI ビデオ作成技術を新たな方法で大衆に提供したが、この技術を使った完成した映画はまだ作成されていない。

2025年4月の最新Genshin Impactコード

2025年4月の最新Genshin Impactコード

Genshin Impact 5.5 コードは、原始石、魔法の鉱物、経験値、その他多くの報酬との交換に役立ちます。

IPadをMacのディスプレイとして使う方法

IPadをMacのディスプレイとして使う方法

macOS Catalina と iPadOS には、iPad を Mac のセカンダリディスプレイとして使用できるように設計された Sidecar という新機能のサポートが含まれています。

壁紙 1280、美しい Nokia 1280 の携帯電話の壁紙

壁紙 1280、美しい Nokia 1280 の携帯電話の壁紙

これは Nokia 1280 の壁紙のセットです。1280 の壁紙やブリック フォンの壁紙を取得するためにテキストを送信したことがある場合は、これらの壁紙を見てみてください。

極超音速宇宙飛行機が時速11,115kmに到達

極超音速宇宙飛行機が時速11,115kmに到達

ヴィーナス・エアロスペース社は、最高速度マッハ9に相当する時速11,115キロに達することができる新型極超音速航空機「スターゲイザー」の初画像を公開した。

朝食にバナナを食べると、お腹の張りが軽減される

朝食にバナナを食べると、お腹の張りが軽減される

腹部膨満は誰にでも起こり得ます。幸いなことに、朝食は、腹部膨満感を軽減するのに役立つ食材を食事に加えるのに最適な時間です。その材料はバナナです。

OpenAI、ChatGPTのAI画像生成機能のメジャーアップデートを発表

OpenAI、ChatGPTのAI画像生成機能のメジャーアップデートを発表

OpenAIはChatGPTのAI画像生成機能の注目すべきアップグレードを正式に導入しました。これは、以前のDALL-Eのような別の画像生成モデルを使用する代わりに重要な前進です。

Deepseek、一般的なハードウェア構成で問題なく動作する無料の言語モデルv3をリリース

Deepseek、一般的なハードウェア構成で問題なく動作する無料の言語モデルv3をリリース

中国の AI スタートアップ企業 DeepSeek が、最新の大規模言語モデル (LLM) である DeepSeek-V3-0324 を正式にリリースしました。

Gboardを捨ててSamsungキーボードに切り替える理由

Gboardを捨ててSamsungキーボードに切り替える理由

Gboard は長い間、Android スマートフォンの定番キーボードでした。しかし、最近になって多くの人が Samsung キーボードに切り替え、後戻りしなくなりました。

恋人たちに贈る甘くロマンチックな週末の願い

恋人たちに贈る甘くロマンチックな週末の願い

甘くロマンチックな週末のお祝いを恋人に送りましょう。それらは単なる言葉やメッセージであっても、意味のある霊的な贈り物となり、あなたの関係を強化するのに役立ちます。

ハリー・ポッターのテレビシリーズが成功するには、以下の要素が必要です

ハリー・ポッターのテレビシリーズが成功するには、以下の要素が必要です

HBOのハリー・ポッターのリメイクは2026年に初公開される予定です。テレビ版ハリー・ポッターの成功の理由は次のとおりです。

世界各地のスーパームーンの素晴らしい写真

世界各地のスーパームーンの素晴らしい写真

美しい月の写真はインターネット上では珍しくありません。この記事では、世界で最も美しい月の写真をまとめて紹介します。

AMD Ryzenユーザーは、無料でパフォーマンス向上を図るためにこのBIOSアップデートをインストールすべきです

AMD Ryzenユーザーは、無料でパフォーマンス向上を図るためにこのBIOSアップデートをインストールすべきです

現在、AMD は、パフォーマンスが低迷している主力 CPU ラインの問題に対処するため、1 秒あたりのフレーム数を数フレーム向上できる新しいアップデートを発表しました。

Xの価値は440億ドルから100億ドル以下に下落

Xの価値は440億ドルから100億ドル以下に下落

2022年10月、イーロン・マスクはXを買収するために440億ドルを費やしたが、現在までに同プラットフォームの価値は78.6%下落して約94億ドルとなっている。