package main import ( "encoding/csv" "fmt" "os" "strconv" "sync" "time" ) type Server struct { } func (server *Server) Connect() chan []string { session := make(chan []string, 128) go func(c chan []string) { file, _ := os.OpenFile("./test.csv", os.O_CREATE|os.O_TRUNC, 0666) defer file.Close() writer := csv.NewWriter(file) defer file.Close() for { strs := <-c if strs[0] == "CLOSE" { writer.Write(strs) writer.Flush() fmt.Println("结束通信") break } writer.Write(strs) writer.Flush() } }(session) fmt.Println("建立连接成功!") return session } func NewServer() *Server { return &Server{} } type Client struct { conn chan []string } func NewClient(server *Server) *Client { c := server.Connect() return &Client{c} } func (client *Client) Send(strs []string) { client.conn <- strs } var wp sync.WaitGroup func main() { server := NewServer() client := NewClient(server) for i := 0; i < 10000; i++ { wp.Add(1) go func() { defer wp.Done() client.Send([]string{"hello", strconv.Itoa(i)}) }() } //time.Sleep(time.Duration(1) * time.Second) wp.Wait() go client.Send([]string{"CLOSE"}) time.Sleep(time.Duration(1) * time.Second) }