package main import ( "bufio" "encoding/json" "log" "math" "net" ) func main() { listener, err := net.Listen("tcp", "0.0.0.0:7000") if err != nil { panic(err) } for { go handle(listener.Accept()) } } func handle(conn net.Conn, err error) { if err != nil { log.Println(err) return } defer conn.Close() reader := bufio.NewScanner(conn) writer := json.NewEncoder(conn) for reader.Scan() { log.Println("received ", reader.Text()) var req struct { Method string `json:"method"` Number *float64 `json:"number"` } if err := json.Unmarshal(reader.Bytes(), &req); err != nil { log.Println(err) return } if req.Method != "isPrime" || req.Number == nil { _, err := conn.Write([]byte("you dingus")) if err != nil { log.Println(err) } return } res := struct { Method string `json:"method"` Prime bool `json:"prime"` }{Method: "isPrime"} n := int64(*req.Number) if *req.Number == float64(n) { res.Prime = isPrime(n) } if err := writer.Encode(res); err != nil { log.Println(err) return } } } func isPrime(n int64) bool { max := int64(math.Sqrt(float64(n))) for i := int64(2); i <= max; i++ { if n%i == 0 { return false } } return n > 1 }