golang中永久阻塞的几种方式

  1. 使用sync.WaitGroup
1
2
3
4
5
6
7
8
9
package main

import "sync"

func main() {
    var wg sync.WaitGroup
    wg.Add(1)
    wg.Wait()
}
  1. 空select
1
2
3
4
5
package main

func main() {
    select{}
}
  1. 永久循环
1
2
3
4
5
package main

func main() {
    for {}
}
  1. 使用锁sync.Mutex 重入锁
1
2
3
4
5
6
7
8
9
package main

import "sync"

func main() {
    var m sync.Mutex
	m.Lock()
    m.Lock()
}
  1. empty通道
1
2
3
4
5
6
package main

func main() {
	c := make(chan struct{})
    <-c
}
  1. nil通道
1
2
3
4
5
6
package main

func main() {
	var c chan struct
    <-c
}