List Golang:创建一个结构片
我想创建一个结构列表,该列表可以由函数以包中的方式返回 但是,创建和填充这样一个列表的正确方法是什么 我找到了两种方法,例如,使用List Golang:创建一个结构片,list,go,struct,List,Go,Struct,我想创建一个结构列表,该列表可以由函数以包中的方式返回 但是,创建和填充这样一个列表的正确方法是什么 我找到了两种方法,例如,使用append(): 通过“直接初始化: ... actualRepos := []Repos{ Repos{Name: "repo1", URL: "gth.com/repo1"}, Repos{Name: "repo2", URL: "gth.com/repo2"}, } 它们都能工作,但看起来都有点笨拙和错误
append()
:
通过“直接初始化:
...
actualRepos := []Repos{
Repos{Name: "repo1", URL: "gth.com/repo1"},
Repos{Name: "repo2", URL: "gth.com/repo2"},
}
它们都能工作,但看起来都有点笨拙和错误
那么,什么是最好的方法呢
看起来需要使用指针创建它,但无法使其工作
但两者看起来都有点尴尬和错误
其实没有什么错,两种方法都是正确有效的。
唯一的区别是切片填充时间。
在第二种方法中,您在开发期间填充slice,这意味着以下代码:
actualRepos := []Repos{
Repos{Name: "repo1", URL: "gth.com/repo1"},
Repos{Name: "repo2", URL: "gth.com/repo2"},
}
始终将创建包含2个元素的切片
但在第一种方法中,您可以使用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]
这两种方法都是正确的,它们都没有错。笨拙或最好是主观的。您可以跳过切片元素的文本初始化中的类型,即
[]Repos{{…},{…}
。最后,您可以将切片初始化为特定长度,并使用索引填充它,即make([]Repos,2)
然后actualRepos[0]=Repo{…}
等。
// s = [r o a x], s2 = [r o a x]