code: func (g *SimpleGraph) AddEdge(v, w interface{}) error {
  	g.mutex.Lock()
  	defer g.mutex.Unlock()
  
  	if v == w {
  		return ErrSelfLoop
  	}
  
  	g.addVertex(v)
  	g.addVertex(w)
  
  	if _, ok := g.adjacencyList[v][w]; ok {
  		return ErrParallelEdge
  	}
  
  	g.adjacencyList[v][w] = struct{}{}
  	g.adjacencyList[w][v] = struct{}{}
  	g.e++
  	return nil
  }
docs: // AddEdge will create an edge between vertices v and w