но оба выглядят немного неловко и неправильно
На самом деле в этом нет ничего плохого, оба подхода верны и верны.
Единственное отличие - это время популяции.
При втором подходе вы заполняете слайс во время разработки, это означает, что код:
actualRepos := []Repos{
Repos{Name: "repo1", URL: "gth.com/repo1"},
Repos{Name: "repo2", URL: "gth.com/repo2"},
}
всегда создает срез с двумя элементами.
Но с 1-м подходом вы можете заполнить слайс во время выполнения, используя append()
, например:
actualRepos := []Repos{}
for _, repo := range allRepos {
actualRepos = append(actualRepos, repo)
}
так что теперь все зависит от allRepos
, и теперь этот код имеет динамическое поведение, которое определяется во время выполнения.
Похоже, нужно создать его с помощью указателя
Обратите внимание, что сам слайс проходит по ссылке, например:
s := [...]string{"r", "o", "a", "d"}
s2 := s[:]
s[3] = "x"
Результат будет:
// s = [r o a x], s2 = [r o a x]