list - 戈朗 : create a slice of strutcs

标签 list go struct

我想创建一个结构列表,函数可以按照 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"},
    }  

它们有效,但看起来都有些尴尬和错误。

那么 - 最好的方法是什么?

看起来需要使用指针创建它但无法使其工作。

最佳答案

but both look bit awkward and wrong

其实并没有错,两种做法都是正确有效的。
唯一的区别是 slice 填充时间。
在第二种方法中,你在开发期间填充 slice ,这意味着这段代码:

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

总是会创建包含 2 个元素的 slice 。

但是使用第一种方法,您可以使用 append() 在运行时填充 slice ,例如:

actualRepos := []Repos{}
for _, repo := range allRepos {
  actualRepos = append(actualRepos, repo)
}

所以现在一切都依赖于 allRepos 并且现在这段代码具有在运行时确定的动态行为。

It looks like need to create it using pointer

请注意slice本身是按引用传递的,例如:

s := [...]string{"r", "o", "a", "d"}
s2 := s[:]
s[3] = "x"

结果将是:

// s = [r o a x], s2 = [r o a x]

关于list - 戈朗 : create a slice of strutcs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55758652/

相关文章:

python - 将字符串中的字母更改为字母和频率-python的数字

google-app-engine - 我无法使用 google.golang.org/appengine 模块将 Go 模块部署到 App Engine

go - 从 k8s 事件处理程序中的对象获取注释

java - RSA OAEP , Golang 解密 , Java 加密

c++ - 访问结构时出现段错误

list - 从命令式到函数式的非平凡算法转换

python - 在 python 中的列表中构建列表

c - 制作结构数组和整理单词时出现问题

python - 有没有办法根据条件语句从各种列表中删除项目?

tomcat - 如何将 hdiv 与多个模块集成(在同一个 tomcat 中运行)