Go 言語では関数とパイプを併用してプロセス間通信を実現します。関数はパイプをパラメーターとして渡し、パイプを介してデータを送受信できます。パイプは、ゴルーチン間でデータを送受信するために使用できるバッファーのないチャネルであり、無向パイプと有向パイプの両方をサポートします。
はじめに
関数とパイプラインは、 Go 言語のコアコンポーネント のプロセス間通信 (IPC) のための強力なツール。この記事では、それらがどのように機能するかを詳しく説明し、それらを使用して通信する方法を示す実践的な例を示します。
Function
Function は Go 言語の第一級市民であり、データをパラメーターとして渡して結果を返すことができます。 goroutine (軽量スレッド) が関数を呼び出すと、その関数は goroutine のスコープ内で実行されます。関数呼び出し間で変数とリソースを渡すことができます。
func add(x, y int) int { return x + y } func main() { result := add(10, 20) fmt.Println(result) // 输出:30 }
パイプライン
パイプは、ゴルーチン間でデータを送受信するために使用されるバッファーなしのチャネルです。パイプは方向を指定しないことも、方向を指定することもできます。無向パイプでは 2 つのゴルーチン間で両方向にデータを送信できますが、有向パイプでは一方向のデータ フローのみが許可されます。
// 无向管道 unbufferedChan := make(chan int) // 有向管道 bufferedChan := make(chan int, 10) // 缓冲区大小为 10
関数とパイプの通信
関数とパイプは、プロセス間通信に一緒に使用できます。パイプを関数パラメータとして渡すことにより、関数はパイプを介してデータを送受信できます。
データの送信
データをパイプに送信するには、<-
演算子 (送信演算子) を使用できます。 <-
オペレーターはパイプにデータを送信し、データが受信されるまで送信ゴルーチンをブロックします。
func sendData(ch chan int) { ch <- 100 }
データの受信
パイプからデータを受信するには、<-
演算子 (受信演算子) を使用できます。 <-
オペレーターはパイプからデータを受信し、データが使用可能になるまで受信ゴルーチンをブロックします。
func receiveData(ch chan int) { data := <-ch fmt.Println(data) // 输出:100 }
実際のケース: パイプラインでの同時計算
次の例は、パイプラインを使用して同時計算を行う方法を示しています。範囲をパイプに送信し、別のゴルーチンでパイプからデータを受信して出力します。バッファリングされていないパイプにより、送信操作と受信操作が確実に同期されます。パイプは 2 つのゴルーチン間の通信メカニズムを提供し、同時計算を可能にします。
以上がgolangの機能とパイプライン通信の原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。