【发布时间】:2017-08-10 13:07:30
【问题描述】:
我知道你可以在 Go via 中获得切片的一个小节
test := []int{0, 1, 2, 3, 4}
subsection := test[:2]
但是如果你尝试类似的东西
subsectionError := test[:10]
你会得到一个越界错误。目前我正在做类似的事情
length := 10
if len(test) < length {
length = len(test)
}
safeSubsection := test[:length]
为了避免错误,但有更好的方法吗?我觉得这很 hacky,但话说回来,Go 通常似乎是一种非常明确的语言。
【问题讨论】:
-
恕我直言,这是在 go 中执行此操作的方法。否则,“更好”、“hacky”听起来像是你在钓鱼,这主要是基于意见的。
-
如何检查您是否正在“hacky”越界访问内存?这是内存安全语言的一部分,而不是依赖 SIGSEGV 来指示您不应该访问这些地址。
-
您想要切片的某个切片但不知道或不关心原始切片的长度或生成的切片是否是您请求的长度也是一种罕见的情况。我猜这是为了截断字符串,在这种情况下我会使用
fmt.Sprintf而不是切片。