Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Golang:创建一个结构片_List_Go_Struct - Fatal编程技术网

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]