Голанг: создать кусочек распорок - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу создать список структур, которые могут быть возвращены функцией таким же образом, как и в пакете go-github .

Но как правильносоздать и заполнить такой список?

Я нашел два способа, например, с помощью append():

...
    allowedRepos := strings.Fields("repo1, repo2")

    actualRepos := []Repos{}
    actualRepos = append(actualRepos, Repos{Name: "repo1", URL: "gth.com/repo1"})
    actualRepos = append(actualRepos, Repos{Name: "repo2", URL: "gth.com/repo2"})
...

и путем "прямой инициализации":

...
    actualRepos := []Repos{
        Repos{Name: "repo1", URL: "gth.com/repo1"},
        Repos{Name: "repo2", URL: "gth.com/repo2"},
    }  

Они работают, но оба выглядят немного неловко и неправильно.

Итак, каков наилучший способ сделать это?

Похоже, нужно создать его с помощью указателя, но не может заставить его работать.

1 Ответ

1 голос
/ 19 апреля 2019

но оба выглядят немного неловко и неправильно

На самом деле в этом нет ничего плохого, оба подхода верны и верны.
Единственное отличие - это время популяции.
При втором подходе вы заполняете слайс во время разработки, это означает, что код:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...