Bottom up mergesort - singly linked list
Just some random notes:

l := new(list)
l.head = getNode(arr[0])


This is usually spelled l := &amp;list{head: getNode(arr[0])}.

n := new(node)
n.val = v


Again, can be shortened to n := &amp;node{val: v}.

var head *node
var prev *node
var end *node
var penult *node


Shorten to var head, prev, end, penult *node.

func append


This is a very bad name for a function because it clashes with a built-in. Better change to something like appendList or make it a method.