//project main.go package main import ( "fmt" "github.com/tarm/goserial" "io" "time" ) //全局Channel func main() { receiveMessage := make(chan string) cfg := &serial.Config{Name: "/dev/cu.usbmodem142201", Baud: 9600, ReadTimeout: time.Microsecond * 900} iorwc, err := serial.OpenPort(cfg) if err != nil { return } go receiveMessageGoroutines(receiveMessage) go writeMessageGoroutines(iorwc) go httpServer(iorwc) tempString := "" //保持数据持续接收 for { buf := make([]byte, 1024) lens, err := iorwc.Read(buf) if err != nil { if tempString != "" { receiveMessage <- tempString tempString = "" } //log.Println(err) continue } revData := buf[:lens] if lens > 0 { tempString += fmt.Sprintf("%s", string(revData)) } } return } func receiveMessageGoroutines(message chan string) { for { select { case data := <-message: //fmt.Println("接收到消息") fmt.Println(time.Now().String() + data) } } } //协程写入数据,每两秒写入一次 func writeMessageGoroutines(iorwc io.ReadWriteCloser) { //for { // data, err := GenerateMessage("这是一条消息") // if err != nil { // return // } // num, err := iorwc.Write(data) // if err != nil { // fmt.Println(err) // return // } // fmt.Println("写入数据的量:" + string(num)) // time.Sleep(time.Second * 2) //} }