我现在才开始修补 Go 大约一个星期,并且对它印象深刻。但是,我仍然有一些我无法解决的问题。
现在的主要问题是,虽然我的连接处理代码正常工作,但我想添加一个独立于连接循环的主游戏循环。如何做到这一点?
package main
import (
"fmt"
"net"
"strconv"
"time"
"galaxy"
)
const PORT = 5555
func main() {
playerFactory := galaxy.NewPlayerFactory()
server, err := net.Listen("tcp", ":" + strconv.Itoa(PORT))
if server == nil {
panic("listen failed: " + err.Error() + "\n")
} else {
defer server.Close()
}
// main loop
go func() {
for {
// entity updates
playerFactory.Update()
}
}() // adding this just blocks everything after the goroutine
// connection handling
for {
conn, err := server.Accept()
if err != nil {
fmt.Printf("client error: %s\n", err.Error())
} else {
playerFactory.CreatePlayer(conn)
}
}
}
以当前编写的方式运行主循环(这是我要添加的部分),但连接处理代码被忽略。这是使用渠道来传递控制权的地方吗?我确信解决方案对于经验更丰富的 Go 程序员来说是显而易见的,我期待您的回答。