code: func (g *Graph) initNode(k *Key) *Node {
  	if g.finalized {
  		panic(ErrFinalized)
  	}
  	if n := g.nodes[k]; n != nil {
  		return n
  	}
  	if g.nodes == nil {
  		g.nodes = make(map[*Key]*Node, 1)
  	}
  	n := &Node{Key: k}
  	g.nodes[k] = n
  	return n
  }
docs: // initNode either returns an existing *Node, or adds a new one.
  //
  // The newly added node is in "predeclared" state: it has no Props or Trace.
  // A predeclared node is moved to the fully declared state by AddNode, this can
  // happen only once for non-idempotent nodes or more than once for idempotent
  // nodes, if each time their props dict is exactly same.
  //
  // Panics if the graph is finalized.