1 Ejemplo simple de goroutine
Fuente de: https://blog.csdn.net/u011957758/article/details/81159481
Los canales se dividen en 4 tipos
- Canal sin búfer
Nota: La operación de envío en el canal sin búfer se bloqueará hasta que otra goroutine ejecute la operación de recepción en el canal correspondiente, momento en el que se completa la transferencia de valor y ambas gorutinas continúan ejecutándose.
Código descripción
paquete main
import (
"fmt"
// "tiempo"
)
var ch chan bool
func HelloWorld () { fmt.Println ("Hola mundo goroutine11") fmt.Println ("11111") fmt.Println ("2222") ch <- true // Pon un valor de tipo bool en la canalización } func main () { ch = make (chan bool) go HelloWorld () // Inicia una nueva operación concurrente <- ch // Hay en la canalización ch Lo leerá y luego ejecutará la siguiente oración. Si no hay contenido, siempre se bloqueará aquí y fmt.Println no se ejecutará más tarde ("Lo mostraré más tarde") }
Nota: Esto evita usar la suspensión para esperar, porque después de que se ejecute la rutina principal, otros también entenderán que las salidas de la rutina pueden no ver los resultados de impresión obtenidos, la administración y la solución razonable a este problema, como sin búfer pasillo
El resultado de la impresión es
- tubería
Mire otro
paquete de ejemplo main
import (
"fmt"
"tiempo"
)
var echo chan string
var receive chan string
// define goroutine 1
func Echo () { time.Sleep (1 * time.Second) echo <- "oveja color café "Camel" } // Definir goroutine 2 func Receive () { temp: = <- echo // Bloquear el retorno del canal esperando eco recibir <- temp } func main () { echo = make (chan string) receive = make (chan string) go Echo () go Receive () getStr: = <-receive // Recibe el retorno de goroutine 2 fmt.Println (getStr) }
Devolver resultado
Nota: esta es una canalización
- Tipo de canal unidireccional
package main
import (
"fmt"
"time"
)
// define goroutine 1
func Echo (out chan <- string) {// define el tipo de canal de salida
time.Sleep (1 * time.Second)
out <- "alpaca color café ”
Close (out)
}
// define goroutine 2
func Receive (out chan <- string, in <-chan string) {// define el tipo de canal de salida y el tipo de entrada
temp: = <-in // bloquea el canal esperando eco Regresar
<- temp
close (out)
}
func main () { echo: = make (chan string) receive: = make (chan string)
go Echo(echo)
go Receive(receive, echo)
getStr := <-receive // 接收goroutine 2的返回
fmt.Println(getStr)
}
- Tubería de amortiguación