考虑以下两段代码:
// Declaring the values inline.
os_list := []string{"Mac OSX", "Linux", "Windows 7"}
fmt.Println(os_list)
// Appending them to an empty slice.
os_list_two := make([]string, 3)
os_list_two = append(os_list_two, "Mac OSX", "Linux", "Windows 7")
fmt.Println(os_list_two)
我们什么时候应该使用其中之一?
最佳答案
make
将为字符串 slice 分配和初始化内存。在您的示例中,os_list_two
在索引 0-2 处包含三个空字符串,后跟项目“Mac OSX”、“Linux”、“Windows 7”。最后,您得到了一个包含六个元素的 slice ,而不是您可能预期的三个。
你可以在这里看到它的插图:
http://play.golang.org/p/Vm92dz8LqF
关于 make
的更多信息:
http://golang.org/ref/spec#Making_slices_maps_and_channels
在 slice 上:
http://blog.golang.org/go-slices-usage-and-internals
如果您事先知道需要多大的 slice ,或者需要在特定位置对 slice 进行索引,或者如果零值在某种程度上对您有用,请使用 make
。如果您只需要一个 slice 来附加项目,您可以简单地使用 []string{}
来定义它。如果您需要使用特定值初始化 slice ,那么不使用 make
也是有意义的,就像您对 os_list
所做的那样。
关于go - 什么时候使用 make vs 内联 slice 初始化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481491/