An interface variable can store any non-interface concrete value, which is really useful when you are not sure about your variable type.
Because interface variable can be any kind of concrete value, we need a good way to determine the REAL value type of interface variable is to use Type Assertions from Go.
In Go, you can use append to insert the item into slice.
func append(slice Type, elems ...Type) Type
append(sliceA, sliceB) function will append sliceB to sliceA and return a new slice, which means you can decide prepend/append by changing these two parameters.
If you want to know the logic of the tower of Hanoi, please refer to this article Python recursion – The Tower of Hanoi. They are exactly the same, just using different language.