title: Golang one to one chat
body: <p>I want make one to one chat on golang and I find this simple script with websocket it work really well and it is one room with how much users inside you want. But I want convert it to one to one like facebook this is script if someone can help because I dont know am I need use more connections or filter users. </p>
  
  <pre><code>package main
  
  import (
      "log"
      "net/http"
  
      "github.com/gorilla/websocket"
  )
  
  var clients = make(map[*websocket.Conn]bool) // connected clients
  var broadcast = make(chan Message)           // broadcast channel
  
  // Configure the upgrader
  var upgrader = websocket.Upgrader{
      CheckOrigin: func(r *http.Request) bool {
          return true
      },
  }
  
  // Define our message object
  type Message struct {
      Email    string `json:"email"`
      Username string `json:"username"`
      Message  string `json:"message"`
      Created  string `json:"created"`
  }
  
  func main() {
      // Create a simple file server
      fs := http.FileServer(http.Dir("public"))
      http.Handle("/", fs)
  
      // Configure websocket route
      http.HandleFunc("/ws", handleConnections)
  
      // Start listening for incoming chat messages
      go handleMessages()
  
      // Start the server on localhost port 8000 and log any errors
      log.Println("http server started on :8090")
      err := http.ListenAndServe(":8090", nil)
      if err != nil {
          log.Fatal("ListenAndServe: ", err)
      }
  }
  
  func handleConnections(w http.ResponseWriter, r *http.Request) {
      // Upgrade initial GET request to a websocket
      ws, err := upgrader.Upgrade(w, r, nil)
      if err != nil {
          log.Fatal(err)
      }
      // Make sure we close the connection when the function returns
      defer ws.Close()
  
      // Register our new client
      clients[ws] = true
  
      for {
          var msg Message
          // Read in a new message as JSON and map it to a Message object
          err := ws.ReadJSON(&amp;msg)
          if err != nil {
              log.Printf("error: %v", err)
              delete(clients, ws)
              break
          }
          // Send the newly received message to the broadcast channel
          broadcast &lt;- msg
      }
  }
  
  func handleMessages() {
      for {
          // Grab the next message from the broadcast channel
          msg := &lt;-broadcast
          // Send it out to every client that is currently connected
          for client := range clients {
              err := client.WriteJSON(msg)
              if err != nil {
                  log.Printf("error: %v", err)
                  client.Close()
                  delete(clients, client)
              }
          }
      }
  }
  </code></pre>
  
  <p>am I need change this part</p>
  
  <pre><code>clients[ws] = true
  </code></pre>