go语言(二十)---- 有缓冲的channel

  1. 有缓冲的channel
    go语言(二十)---- 有缓冲的channel_第1张图片
  2. 举个例子
package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan int,3) //带有缓冲的 channel

	fmt.Println("len(c) =",len(c),",cap(c)",cap(c))

	go func() {
		defer fmt.Println("子go程结束")

		for i :=0; i<3; i++ {
			c <- i
			fmt.Println("子go程正在进行,发送的元素=",i,"len(c)=",len(c),",cap(c)=",cap(c))
		}
	}()
	time.Sleep(2* time.Second)
	for i :=0; i<3 ;i++  {
		num := <-c  //从c中接收数据,并赋值给num
		fmt.Println("num= ",num)

	}

	fmt.Println("main 结束")
	}

go语言(二十)---- 有缓冲的channel_第2张图片

  1. 当改为4个元素的时候,结果如下图所示:
package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan int,3) //带有缓冲的 channel

	fmt.Println("len(c) =",len(c),",cap(c)",cap(c))

	go func() {
		defer fmt.Println("子go程结束")

		for i :=0; i < 4; i++ {
			c <- i
			fmt.Println("子go程正在进行,发送的元素=",i,"len(c)=",len(c),",cap(c)=",cap(c))
		}
	}()
	time.Sleep(2* time.Second)


	for i :=0; i < 4 ;i++  {
		num := <-c  //从c中接收数据,并赋值给num
		fmt.Println("num= ",num)

	}

	fmt.Println("main 结束")
	}

go语言(二十)---- 有缓冲的channel_第3张图片

你可能感兴趣的:(golang,开发语言,后端)