Если объявить type s1 []s1, то заполнять так:
s1 := s1{
		{
			{}, {
				{}, {}, {}, {}, {},
			}, {},
		},
	}
Пользы это этого никакой, правда, ибо там негде хранить значения.
Если вам надо просто хранить n-мерный массив, я бы предложил лучше хранить одномерный массив, просто написать функцию обращения к нужному элементу с учетом n-мерности.
Если нужна именно мультивложенность и у вложенных соседних элементов может быть разная размерность, то придется сделать структуру, чтобы можно было хранить значения.
type s1 struct {
	Value    int // тут любой тип можно, в принципе, лучше указателем
	Children []s1
}
func main() {
	s1 := s1{
		Children: []s1{
			{Children: []s1{
				{Value: 1}, {Value: 2}, {Value: 3},
			}},
			{Children: []s1{
				{Value: 4}, {Value: 5},
			}},
		},
	}
	fmt.Println(s1)
}