何时使用make vs inline slice初始化程序?

ser*_*erg 4 go slice

考虑以下两段代码:

// 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.