ホームページ > バックエンド開発 > Golang > golang での <- の意味

golang での <- の意味

PHPz
リリース: 2023-05-13 11:10:08
オリジナル
2758 人が閲覧しました

Golang では、<- は複数の意味と使用法を持つ非常に重要な演算子です。この記事では、<- 演算子の一般的な使用法とその意味を例を挙げて説明します。

1. チャネルの送受信

Golangのチャネルはコルーチン間の通信を実現するための重要なコンポーネントであり、チャネルの送受信には<-演算子を使用します。具体的な使用法は次のとおりです。

ch := make(chan int)

// 发送数据
ch <- 10

// 接收数据
x := &lt;- ch
ログイン後にコピー

ここでの <- 演算子には 2 つの異なる意味があります:

  • &lt;- ch : チャネル ch からデータを受信し、変数 x
  • ch <- x: 変数 x## を変更します。 # チャネル ch に送信

    で使用されている矢印の方向もデータの流れの方向を示しており、左側が受信動作、右側が送信動作です。

2. チャネルを閉じる

チャネルは、

close() 関数を使用して閉じることもできます。チャネルが閉じられると、データが送信されます。再度実行するとパニックが発生しますが、引き続きデータを受信できます。 <- 演算子を使用して、チャネルが閉じているかどうかを検出できます。

ch := make(chan int)
// 关闭通道
close(ch)
// 接收值和通道关闭状态
v, ok := &lt;- ch
ログイン後にコピー

ok の値は false であり、チャネルが閉じられていることを意味します。チャネルのバッファが空でない場合、<- はバッファ内の値を返します。それ以外の場合は、対応する型のゼロ値が返されます。

3. ノンブロッキング チャネル通信に使用されます

<- ノンブロッキング チャネル通信にも使用できます。チャネル内に受信または送信するデータがある場合は、対応する操作が実行され、そうでない場合はすぐに返されます。これは、操作を select ステートメントでラップすることで実現できます。

ch := make(chan int)
// 非阻塞接收,若通道为空,直接进入 default 分支
select {
case x := &lt;- ch:
    fmt.Println(x)
default:
    fmt.Println("no data available")
}

// 非阻塞发送,若通道已满,直接进入 default 分支
select {
case ch <- 10:
    fmt.Println("data send")
default:
    fmt.Println("no receiver available")
}
ログイン後にコピー

上記のコードでは、チャネルが空の場合、最初の

select ステートメントが直接実行されます。デフォルトのブランチ。チャネルがいっぱいの場合、2 番目の select ステートメントもデフォルトのブランチを直接実行します。

4. コンパイラの警告を防ぐために使用されます

場合によっては、コード内で明示的に値を受け取る必要がある場合がありますが、この値を使用する必要はありません。

<- 演算子を使用すると、この目的が達成され、コンパイラによる「未使用の値」警告の生成も防止されます:

&lt;- ch
ログイン後にコピー
このステートメントはチャネル

chから削除されます「受信するが使用しない」という目的を達成するには、値を受信して​​無視します。

上記の 4 つの例を通して、Golang コードにおける

<- 演算子の重要な役割がわかります。これはチャネルの送受信に使用されるだけでなく、コンパイラの警告や非ブロッキングチャネル通信を防ぐためにも使用できます。これらの使用法をマスターすると、Golang コードの読みやすさとパフォーマンスが向上します。

以上がgolang での <- の意味の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート