考虑以下两段代码:
// 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)
Run Code Online (Sandbox Code Playgroud)
我们什么时候应该使用其中一种?
Rob*_*jic 10
make将为字符串切片分配和初始化内存.在您的示例os_list_two中,在索引0-2处包含三个空字符串,后跟"Mac OSX","Linux","Windows 7"项.最后你有一个包含六个元素的切片,而不是你预期的三个元素.
你可以在这里看到它:http:
//play.golang.org/p/Vm92dz8LqF
更多信息make:http:
//golang.org/ref/spec#Making_slices_maps_and_channels
在切片上:http:
//blog.golang.org/go-slices-usage-and-internals
使用make时,你知道你需要一个切片事先有多大,或者你需要指数切片在特定的位置,或者如果零值以某种方式对你有用.如果您只需要一个切片来附加项目,您可以使用它来定义它[]string{}.make如果您需要使用特定值初始化切片,也可以使用它,就像您所做的那样os_list.