原文地址:Go-每日面试题目~(一)
1、ch:=make(chan interface{})和ch:=make(chan interface{},1)有什么区别?
第一个是声明无缓存channel,第二个是声明缓冲为1的channel,无缓存channel需要一直有接收者接收数据,写操作才会继续,否则一直阻塞,而缓冲为1的channel即使没有接收者也不会阻塞,因为其缓冲大小是1,只有放第二个值时,第一个还没被取出时候才会阻塞,这两者还是有区别的。
2、以下代码会输出什么?请简要说明。
var mu sync.Mutex
var chain string
func main() {
chain = "main"
A()
fmt.Println(chain)
}
func A() {
mu.Lock()
defer mu.Unlock()
chain = chain + " --> A"
B()
}
func B() {
chain = chain + " --> B"
C()
}
func C() {
mu.Lock()
defer mu.Unlock()
chain = chain + " --> C"
}
上述代码会输出fatal error,首先mu是全局的,在A()方法中一开始就使用mu的Lock()加锁了,之后在A()中调用B(),B()中调用C(),C()方法中又使用m