当receiver 为指针或非指针时,
对于指针的变量,可以对该实例赋值,多线程的操作可以让该变量获得值
对于非指针的变量,因为是值复制,所以是一个新的变量
所有函数无外乎读,写,计算
func main() {
wg := sync.WaitGroup{}
wg.Add(1)
s := sgxk{
stop: make(chan struct{}),
}
fmt.Printf("init go routine is [%v] \n", runtime.NumGoroutine())
go s.s()
go s.s1()
go gocount(s.stop)
wg.Wait()
}
func gocount(stop chan struct{}) {
t := time.NewTicker(time.Second)
timeout := 0
for {
select {
case <-t.C:
fmt.Printf("tiemout is [%v] current go routime num is [%v] \n", timeout, runtime.NumGoroutine())
timeout++
if timeout == 10 {
fmt.Println("timeout need stop")
stop <- struct{}{}
}
}
}
}
type sgxk struct {
stop chan struct{}
}
func (s *sgxk) s() {
for {
select {
case <-s.stop:
fmt.Println("s receive stop sign")
return
}
}
}
func (s sgxk) s1() {
for {
select {
case <-s.stop:
fmt.Println("s1 receive stop sign")
return
}
}
}
func sglk(wg *sync.WaitGroup) {
t := time.NewTicker(time.Second)
x := 0
for {
select {
case <-t.C:
fmt.Println(x)
x++
if x == 10 {
wg.Done()
}
}
}
}
output:
init go routine is [1]
tiemout is [0] current go routime num is [4]
tiemout is [1] current go routime num is [4]
tiemout is [2] current go routime num is [4]
tiemout is [3] current go routime num is [4]
tiemout is [4] current go routime num is [4]
tiemout is [5] current go routime num is [4]
tiemout is [6] current go routime num is [4]
tiemout is [7] current go routime num is [4]
tiemout is [8] current go routime num is [4]
tiemout is [9] current go routime num is [4]
timeout need stop
s receive stop sign
tiemout is [10] current go routime num is [3]
tiemout is [11] current go routime num is [3]
tiemout is [12] current go routime num is [3]
tiemout is [13] current go routime num is [3]