func (l *SinglyList) InsertAfter(nodePtr *Node, v Value) {
	if l.tail == nodePtr {
		l.Push(v)
		return
	}
	n := Node{Value: v, next: nodePtr.next}
	fmt.Printf("    1. Create new node %v\n", n)
	fmt.Printf("       Notice the next pointer is %p\n", n.next)
	fmt.Printf("    2. Update the next pointer in %v from %p to %p\n", nodePtr.name, nodePtr.next, &n)
	nodePtr.next = &n
}
InsertAfter - Provide the Value.name to insert after
package main
import (
	"fmt"
)
type SinglyList struct {
	head *Node
	tail *Node
}
type Node struct {
	Value
	next *Node
}
type Value struct {
	name   string
	age    int
	gender string
}
func (l *SinglyList) Push(v Value) {
	n := Node{Value: v, next: nil}
	myNode := &n
	fmt.Printf("    For the new Node Address %p ", myNode)
	fmt.Printf("adding Value=%v\n", v)
	if l.head == nil {
		l.head = myNode
	}
	if l.tail != nil {
		l.tail.next = myNode
	}
	l.tail = myNode
}