去通道容量,为什么比我指定的多一个元素

package main

import "fmt"

import "time"


func main() {

     message := make(chan string ,1) // no buffer

     count := 3


     go func() {

          for i := 1; i <= count; i++ {

               fmt.Println("send message")

               message <- fmt.Sprintf("message %d", i)

          }

     }()


     time.Sleep(time.Second * 3)


     for i := 1; i <= count; i++ {

          fmt.Println(<-message)

     }

}

输出是


send message

send message  [wait for 3 sec]

message 1

send message

message 2

message 3

如果我message := make(chan string ,1) // no buffer改为


message := make(chan string ,2) // no buffer

我有


send message

send message

send message [wait 3 sec]

message 1

message 2

message 3

为什么 2 个缓冲区通道可以存储 3 个字符串对象?不是2?


泛舟湖上清波郎朗
浏览 189回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go