在这个上下文[]字符串(nil)中究竟是什么(nil)

时间:2016-01-09 00:53:41

标签: go

我正在看切片技巧: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{}

或者这里的区别是什么

2 个答案:

答案 0 :(得分:3)

这是一种类型转换,将nil转换为切片。

这些是等效的

var t []string
t := []string(nil)

在这两种情况下,t的类型为[]stringt == 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"并返回结果。

这个结果切片是一个副本,因为它具有相同顺序的所有相同值。