title: How to delete duplicates of an item from a slice?
body: <p>I'm writing a command line tool that will delete peers from a text file. </p>
  
  <p>This is the text file. Its reference in code is cfg.Bootstrap </p>
  
  <pre><code> "Bootstrap": [
  {
    "Address": "/ip4/162.243.139.64/tcp/5001",
    "PeerID": "QmXZPT1SLcczjNSLnSCsQBWwbosKjrDRo122Ys8ajKoQXQ"
  },
  {
    "Address": "/ip4/162.243.139.64/tcp/5001",
    "PeerID": "QmXZPT1SLcczjNSLnSCsQBWwbosKjrDRo122Ys8ajKoQXA"
  },
  {
    "Address": "/ip4/162.243.139.64/tcp/5001",
    "PeerID": "QmXZPT1SLcczjNSLnSCsQBWwbosKjrDRo122Ys8ajKoQXQ"
  },
  {
    "Address": "/ip4/162.243.139.64/tcp/5001",
    "PeerID": "QmXZPT1SLcczjNSLnSCsQBWwbosKjrDRo122Ys8ajKoQXA"
  }
  </code></pre>
  
  <p>]</p>
  
  <p>The peer object is created using a user supplied PeerID and Address. It looks like this</p>
  
  <pre><code>peer := config.BootstrapPeer{
                  Address: address,
                  PeerID:  pID,
              }
  </code></pre>
  
  <p>The goal is to remove all peers cfg.Bootstrap that contain the user supplied Address and PeerID</p>
  
  <pre><code>   //iterate through the list of peers multiple times so that we delete all matches
     for i := range cfg.Bootstrap {
  
              //iterate through the list of peers
              for i, val := range cfg.Bootstrap {
  
                  //if the user supplied PeerID and Address match a Peer object in cfg.Bootstrap..
                  if(val.PeerID == peer.PeerID &amp;&amp; val.Address == peer.Address) {
  
                  //remove that element 
                      cfg.Bootstrap = append(cfg.Bootstrap[:i], cfg.Bootstrap[i+1:]...)
                  }
  
              }
  
                  fmt.Println(i)
  
      }
  </code></pre>
  
  <p>This works UNLESS the last peer in cfg.Bootstrap has a duplicate. If it has a duplicate then Go panics with </p>
  
  <pre><code>panic: runtime error: slice bounds out of range
  </code></pre>
  
  <p>I need to make it so the user can delete all copies of a peer that include the last peer. Any ideas?</p>