Golang中国

本人刚开始接触Go,这是我学习过程中遇到的问题,请指教
代码一:

package main
import  "fmt"
func main() {
    messages := make(chan string, 1)
    msg := "hi"
    select {
    case messages <- msg:
        fmt.Println("sent message", msg)
    default:
        fmt.Println("no message sent")
    }
}

代码二:

package main
import  "fmt"
func main() {
    messages := make(chan string)
    msg := "hi"
    select {
    case messages <- msg:
        fmt.Println("sent message", msg)
    default:
        fmt.Println("no message sent")
    }
}

两个代码的区别仅仅在于对message的定义,代码一指定message可以容纳一个元素,代码二没有指定,以下是执行结果。
代码一结果:
sent message hi
代码二结果:
no message sent

messages := make(chan string)和messages := make(chan string, 1)有不同意义?


jimmykuu 于 2017-06-07 10:43 修改
2 回复
eric160
#1 eric160 • 2017-06-08 14:35
ch=make(chan int) //无缓冲chan
ch=make(chan int,0) //无缓冲chan
ch=make(chan int,1) //有缓冲chan,容量为1

你把你代码一、代码二中的

default:
        fmt.Println("no message sent")

去掉分别运行一下试试,就会发现无缓冲的死锁了,而有1的没有死锁。

lmhao
#2 lmhao • 2017-06-08 19:35

确实确实,多谢多谢

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。