我想了解概述本幻燈片上的問題:這個陳如何泄露?
http://talks.golang.org/2013/bestpractices.slide#27
複製的情況下,URL死亡代碼:
func sendMsg(msg, addr string) error {
conn, err := net.Dial("tcp", addr)
if err != nil {
return err
}
defer conn.Close()
_, err = fmt.Fprint(conn, msg)
return err
}
func broadcastMsg(msg string, addrs []string) error {
errc := make(chan error)
for _, addr := range addrs {
go func(addr string) {
errc <- sendMsg(msg, addr)
fmt.Println("done")
}(addr)
}
for _ = range addrs {
if err := <-errc; err != nil {
return err
}
}
return nil
}
func main() {
addr := []string{"localhost:8080", "http://google.com"}
err := broadcastMsg("hi", addr)
time.Sleep(time.Second)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("everything went fine")
}
與點評:
- goroutine在chan上被阻止寫入
- 該goroutine持有對t的引用他瓚
- 陳女士將永遠不會被垃圾收集
我不知道我明白爲什麼陳永遠不會被收集或夠程被保持到陳的參考。感謝您的時間!