go - 为什么这个 go slice 的长度是 4,为什么输出在 slice 中有空间?
问题描述
我是 golang 的新手,在运行此代码片段时,我将 len 设为 4,试图理解为什么会这样?
package main
import "fmt"
type phone struct {
model string
camera Camera
ram int
}
type Camera struct {
lens string
aparature int
}
func main() {
var m = make(map[string]phone)
myphn1 := phone{model: "iphone", camera: Camera{"20", 4}, ram: 6}
myphn2 := phone{model: "pixel", camera: Camera{"50", 2}, ram: 6}
m["myphn1"] = myphn1
m["myphn2"] = myphn2
var k = make([]string, len(m))
for key, _ := range m {
k = append(k, key)
}
fmt.Println(k)
fmt.Println(len(k))
}
我知道这在创建时增加了 2 的大小,但是在打印时它给出了类似的结果,是 2 个未分配条目的答案空间吗?
[ myphn2 myphn1]
4
解决方案
这将创建一个长度为 2 的切片(len(m)
此处为 2):
var k = make([]string, len(m))
这增加了两个元素,总共 4 个:
for key, _ := range m {
k = append(k, key)
}
如果要预分配切片,则需要提供长度为零以及所需容量:
var k = make([]string, 0, len(m))
围棋之旅中的示例对此进行了介绍。
推荐阅读
- boost - 未定义对符号 '_ZN5boost6system15system_categoryEv' 的引用 /
- javascript - 如何从这个 AJAX 调用返回结果?
- python - 具有不同条件的自定义函数 + groupby Pandas 按变量分组
- python - 通过pyinstaller创建exe文件但不起作用
- cmake - 在 CMake 脚本中获取 Vcpkg 路径
- reactjs - 一种缩短此代码的方法
- html - 使悬停时仅可单击链接文本
- angular5 - ngx-bootstrap 工具提示不适用于 Div
- javascript - 使用angular2检查复选框时如何获取该特定部分的数据
- c# - 如何在 C# 中使用 Excel 参数高亮显示