为了账号安全,请及时绑定邮箱和手机立即绑定

在这种情况下 (nil) 到底在做什么 []string(nil)

在这种情况下 (nil) 到底在做什么 []string(nil)

Go
撒科打诨 2021-12-06 19:51:37
我在看切片技巧:https : //github.com/golang/go/wiki/SliceTricks我在他们的复制示例中注意到他们有 []T(nil)我以前从未见过(nil)这样的东西,我找不到任何关于使用它的文档或它究竟完成了什么(我知道它是不言自明的,但我想知道它如何与make或[]string{}我可以通过谷歌搜索“golang (nil) slice”找到的唯一参考是由于切片 (nil) 的零值就像一个零长度切片,您可以声明一个切片变量,然后在循环中附加到它:但它没有说明它可以在哪里使用或它完成了什么,比如我可以将它与结构或任何我想要的一起使用吗?例如:包主导入“日志”func main() {    str := []string{"Hello", "Bye", "Good Day", "????????"}    cop := append([]string(nil), str...)        log.Println(str)    log.Println(cop)}我只是对如何(nil)运作以及它可以运作的内容感到好奇。喜欢[]string(nil)操作一样[]string{}或者这里有什么区别
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

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


这些是等价的


var t []string

t := []string(nil)

在这两种情况下,t都是类型[]string,并且t == nil


查看完整回答
反对 回复 2021-12-06
?
慕少森

TA贡献2019条经验 获得超9个赞

list := []string(nil) // list is an empty slice of strings

func append(slice []Type, elems ...Type) []Type

函数接受一个字符串切片和一个可变长度的字符串列表,并返回一个将字符串列表附加到末尾的切片。

所以:

cop := append([]string(nil), str...)

将创建一个空的字符串切片并将字符串附加到“str”中并返回结果。

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


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信