您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關溶解性golang中的空結構體channel的分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
省內存,尤其在事件通信的時候。
struct零值就是本身,讀取close的channel返回零值
首先事件通知,可以通過寫入 通知其他協程,但是只能通知一個。
channel := make(chan struct{})
go func() {
// ... do something
channel <- struct{}{}
}()
fmt.Println(<-channel)
和close進行配合,通知所有相關協程。
在讀入被close的channel返回零值,正常的協程是讀取不到這個close的。
close之后,所有協程都可以讀到。
比較經典的例子就是用于stopChan作為停止channel通知所有協程。
在下面的例子中 我們可以通過s.Stop()通知所有的serverHandler協程停止工作,并且等待他們正常退出。
type Server struct {
serverStopChan chan struct{}
stopWg sync.WaitGroup
}
func (s *Server) Stop() {
if s.serverStopChan == nil {
panic("gorpc.Server: server must be started before stopping it")
}
close(s.serverStopChan)
s.stopWg.Wait()
s.serverStopChan = nil
}
func serverHandler(s *Server){
for {
select {
case <-s.serverStopChan:
return
default:
// .. do something
}
}
}
看完上述內容,你們對溶解性golang中的空結構體channel的分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。