我正在看切片技巧:https://github.com/golang/go/wiki/SliceTricks
我注意到他们的副本示例中有[]T(nil)
我以前没有看过(nil)
这样的事情,我找不到任何关于使用它的文件或它究竟完成了什么(我知道这是自我解释但我想要知道它与make
或[]string{}
我可以通过谷歌搜索" golang(nil)切片找到的唯一参考"是
由于切片的零值(nil)就像一个零长度切片,你可以声明一个切片变量,然后在循环中追加它:
但它并没有说明它可以在哪里使用,也没有说它完成了什么,就像我可以用结构或任何我想要的那样?
e.g:
package main
import" log"
func main() {
str := []string{"Hello", "Bye", "Good Day", "????????"}
cop := append([]string(nil), str...)
log.Println(str)
log.Println(cop)
}
我严格只对(nil)
如何运作及其可以操作的内容感到好奇。
喜欢
[]string(nil)
操作与
相同[]string{}
或者这里的区别是什么
答案 0 :(得分:3)
这是一种类型转换,将nil
转换为切片。
这些是等效的
var t []string
t := []string(nil)
在这两种情况下,t
的类型为[]string
,t == nil
答案 1 :(得分:0)
list := []string(nil) // list is an empty slice of strings
func append(slice []Type, elems ...Type) []Type
函数接受一串字符串和一个可变长度的字符串列表,并返回一个切片,其中字符串列表被附加到末尾。
这样:
cop := append([]string(nil), str...)
将创建一个空的字符串切片并将字符串附加在" str"并返回结果。
这个结果切片是一个副本,因为它具有相同顺序的所有相同值。