golang generics vs empty interface