(看博客) 事件多播/订阅服务https://jacobmartins.com/2016/04/04/practical-golang-event-multicastsubscription-service/
发现一个很危险的事:
slice 在截取的时候,和append的时候,是基于原数组的,譬如下面这些
ar := []int{1,2,3,4,5,6,7,8}
ar = ar[2:3]
ar = append(ar, 1)
fmt.Printf("len: %d cap: %d val: %v\n", len(ar), cap(ar), ar) // len: 2 cap: 6 val: [3 1]
ar = ar[:6]
fmt.Printf("len: %d cap: %d val: %v\n", len(ar), cap(ar), ar) // len: 6 cap: 6 val: [3 1 5 6 7 8]