package main import "fmt" // MyListElement contains custom-attributes and internal data type MyListElement struct { Name string Age int next *MyListElement prev *MyListElement } // Next iterates to the next list element, or nil if end of list func (i *MyListElement) Next() *MyListElement { return i.next } // MyList structure, pointer for begin and end element type MyList struct { head *MyListElement tail *MyListElement } // Append item to end of list func (list *MyList) Append(item *MyListElement) { if list.head == nil && list.tail == nil { list.head = item list.tail = item item.next = nil item.prev = nil return } list.tail.next = item item.prev = list.tail item.next = nil list.tail = item } func (list *MyList) Delete(item *MyListElement) { if list.head == item && list.tail == item && item.prev == nil && item.next == nil { list.head = nil list.tail = nil return } item.prev = item.next item.next = item.prev } // Count elements in list func (list *MyList) Count() int { count := 0 for i := list.head; i != nil; i = i.next { count++ } return count } func main() { list := MyList{} { a := &MyListElement{Name: "Max", Age: 23} list.Append(a) } { b := &MyListElement{Name: "Hans", Age: 42} list.Append(b) } fmt.Println(list.Count()) }