Go 関数で goroutine を使用してデータを送信するには、パイプを介してデータを渡す、バッファリングされていないチャネルを作成する、Goroutine にパイプを介してデータを送受信させる 3 つの方法があります。チャネル パラメーターを介してデータを渡し、そのチャネルを関数のパラメーターとして使用して、関数がパイプにアクセスできるようにします。インターフェースを介してデータを渡し、同じメソッドで異なる型を使用し、Goroutine がインターフェースを介してデータと対話できるようにします。
Goroutine は、メイン スレッドをブロックせずにデータを送信できる Go の軽量の同時関数です。タスク。関数間でデータを渡すことは、ゴルーチンを使用する一般的なシナリオです。
パイプは、Goroutine 間の通信に使用されるバッファーなしのチャネルです。パイプを介してデータを渡す方法の例を次に示します。
package main import ( "fmt" "time" ) func main() { // 创建一个管道 channel := make(chan int) // 创建一个 Goroutine 来发送数据 go func() { time.Sleep(1 * time.Second) channel <- 42 // 将 42 发送到管道 }() // 从管道中接收数据 data := <-channel fmt.Println("Received:", data) }
チャネルをパラメータとして関数に渡すことができ、関数がそのチャネルにアクセスできるようになります。パイプ:
package main import ( "fmt" "time" ) func sendData(channel chan int) { time.Sleep(1 * time.Second) channel <- 42 // 将 42 发送到管道 } func main() { // 创建一个管道 channel := make(chan int) // 创建一个 Goroutine 来发送数据 go sendData(channel) // 从管道中接收数据 data := <-channel fmt.Println("Received:", data) }
Channel は、複数の Goroutine からデータを送受信する必要がある場合に便利です。
インターフェイスを使用すると、同じメソッドで異なる型を使用できます。インターフェイスを介してデータを渡す方法の例を次に示します。
package main import ( "fmt" "time" ) type Data interface { getData() int } type dataImpl struct { data int } func (d *dataImpl) getData() int { return d.data } func main() { // 创建一个实现了 Data 接口的结构 data := &dataImpl{42} // 创建一个 Goroutine 来处理数据 go func() { time.Sleep(1 * time.Second) fmt.Println("Data:", data.getData()) // 调用接口方法 }() }
インターフェイスを介してデータを渡すと、コードの柔軟性と拡張性が高まります。
以上がgoroutine はどのようにして golang 関数でデータを転送しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。