V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BBCCBB
V2EX  ›  程序员

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

  •  
  •   BBCCBB · 2022-12-19 00:21:34 +08:00 · 1491 次点击
    这是一个创建于 705 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    4 条回复    2022-12-19 12:52:07 +08:00
    seakingii
        1
    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
        2
    wangyu17455  
       2022-12-19 02:42:37 +08:00 via Android
    有一个接口可能返回任意条数据,当没有符合条件的数据时,返回空切片还是 nil ?这不是显而易见的吗
    swulling
        3
    swulling  
       2022-12-19 09:07:57 +08:00
    不为什么,很多语言都是这样的,保持一致性而已。

    就好像数组下标从零开始,你要问为什么,也没有理由。
    BBCCBB
        4
    BBCCBB  
    OP
       2022-12-19 12:52:07 +08:00
    @wangyu17455 返回空 slice 完全可以 new 一个空的 slice 去返回.
    @seakingii 这个例子可以.
    @swulling 对,java 里的 subList fromIndex 也是可以等于 size
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2813 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:44 · PVG 10:44 · LAX 18:44 · JFK 21:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.