3 回答
TA贡献1864条经验 获得超2个赞
Go 切片无法做到这一点,但该append()函数会在追加元素成为O (1) 分摊操作的情况下增大切片:
func listFile() []string {
// make a slice of length 0
list := make([]string, 0)
files, _ := ioutil.ReadDir("content")
for _, f := range files {
// append grows list as needed
list = append(list, f.Name())
}
return list
}
TA贡献1982条经验 获得超2个赞
要从 的切片生成名称的切片FileInfo,您不需要像 Java 那样的任何东西ArrayList。
ioutil.ReadDir()返回一个切片FileInfo,您可以使用内置len函数查询其长度:
count := len(files)
所以你可以创建一个数组或切片能够保存这个数量的名称:
func listFile() []string {
files, _ := ioutil.ReadDir("content")
list := make([]string, len(files))
for i, f := range files {
list[i] = f.Name()
}
return list
}
TA贡献1757条经验 获得超7个赞
是的,您可以创建一个空切片并使用append. 如果您或多或少知道您期望的平均大小,您可以为它保留一些空间,就像在 Java 的 ArrayList 中一样。这将防止在切片增长时重新分配底层数据。
//make an empty slice with 20 reserved items to avoid
list := make([]string, 0, 20)reallocation
// now we just append to it. The underlying data is not copied
list = append(list, "foo") // add to it
- 3 回答
- 0 关注
- 217 浏览
添加回答
举报