[Go] go 中切片 low 可以等于 len, 这样做有什么特别的意义吗?

2022-12-19 00:21:34 +08:00
 BBCCBB

https://go.dev/play/p/6FTdrv2fX72

具体可以见这里, 虽然规范里有些 low==len 是合法的, 但这样做有什么意义呢? https://stackoverflow.com/questions/30208182/why-does-go-allow-slicing-from-lenslice

1507 次点击
所在节点    程序员
4 条回复
seakingii
2022-12-19 00:50:34 +08:00
你这个问题,就是"空切片"有没有意义
空切片当然有意义,就是表示这个切片有指向底层数组,但切片是空的

package main

import "fmt"

func main() {
var s1 = "12"
var s2 = "" //空字符串
var slice1 = s1[1:] //["2"]
var slice2 = s1[2:] //[] 空 slice

fmt.Println(s1, s2, slice1, slice2)

}

比如 这个代码 空 slice 的意义就和字符串一样,你不能没有它.
wangyu17455
2022-12-19 02:42:37 +08:00
有一个接口可能返回任意条数据,当没有符合条件的数据时,返回空切片还是 nil ?这不是显而易见的吗
swulling
2022-12-19 09:07:57 +08:00
不为什么,很多语言都是这样的,保持一致性而已。

就好像数组下标从零开始,你要问为什么,也没有理由。
BBCCBB
2022-12-19 12:52:07 +08:00
@wangyu17455 返回空 slice 完全可以 new 一个空的 slice 去返回.
@seakingii 这个例子可以.
@swulling 对,java 里的 subList fromIndex 也是可以等于 size

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903381

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX