访问 Go 切片而不惊慌

问题描述 投票:0回答:1

当切片没有足够的元素时,如何访问切片而不惊慌?

我有以下代码:

str = str[:3]

但是由于它的内容长度可能会有所不同,因此当它的元素少于 3 个时,整个程序就会崩溃。有什么办法可以忽略它吗?在 Javascript 中,我可以使用

slice
方法,而不会出现此问题。例如:

str = str.slice(0, 3);

即使字符串长度小于 3,也会对字符串进行切片。

go slice
1个回答
0
投票

要处理此类情况并模仿类似于 JavaScript 切片方法的行为,您可以创建一个实用程序函数来确保切片边界有效。

package main

import "fmt"

func safeSlice(s string, start int, end int) string {
    if start > len(s) {
        return ""
    }
    if end > len(s) {
        end = len(s)
    }
    return s[start:end]
}

func main() {
    str := "ab"
    fmt.Println(safeSlice(str, 0, 3)) // prints "ab"
}
  1. 如果

    start
    索引大于字符串s的长度,则返回空字符串。这可以防止从越界开始位置进行切片。

  2. 如果

    end
    索引大于s的长度,则将末尾设置为s的实际长度。这可确保您不会尝试切片超出字符串末尾。

  3. 然后它使用经过验证的边界返回切片字符串。

© www.soinside.com 2019 - 2024. All rights reserved.