Golang中为什么字符串切片的最后一个字符无法打印

Golang中为什么字符串切片的最后一个字符无法打印

primes := [6]int{2, 3, 5, 7, 11, 13}
fmt.Println(primes[1:4])

输出结果: [3 5 7] 我的专业领域是Ada语言,为什么打印结果不是[3 5 7 11]? 为什么数组切片的最后一个元素在打印时没有输出?

7 回复

肖恩,谢谢您!这让我对引擎的内部原理完全清楚了。

更多关于Golang中为什么字符串切片的最后一个字符无法打印的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢。我正在努力理解这一点。切片给我的感觉像是原始变量中某一部分的指针。我这样理解对吗?

没问题!既然我们提到了“引擎”,我想明确一点:我的概念性示例实际上创建了一个副本,但切片操作并不会真正创建一个副本,它只是调整了底层数组的指针、长度和容量。

感谢肖恩, 我知道现在已经是七月底了,但我直到现在才真正有时间坐在键盘前,而不是在工作时。切片看起来非常像Python的风格。我不是Python用户,只是在工作中偶尔被迫使用它。但真心感谢你详尽的回复。我五月份就看到了你的回复,显然我粗心地忘了道谢。 迈克

Go 中的切片在概念上是 source[起始索引 : 结束索引+1]

var target []int

for i := starting_index; i < ending_index; i++ {
    target = append(target, source[i])
}

https://play.golang.org/p/8qrobCLylnA

在Go语言中,切片操作 primes[1:4] 遵循 左闭右开 的区间规则,即包含起始索引(1),但不包含结束索引(4)。因此,它只会包含索引为 1、2、3 的元素,对应数组中的值 3、5、7。

示例代码:

package main

import "fmt"

func main() {
    primes := [6]int{2, 3, 5, 7, 11, 13}
    slice := primes[1:4] // 包含索引1到3,不包含索引4
    fmt.Println(slice)   // 输出: [3 5 7]
}

如果你需要包含索引为 4 的元素(值 11),应该使用 primes[1:5]

slice := primes[1:5] // 包含索引1到4
fmt.Println(slice)   // 输出: [3 5 7 11]

Go语言的切片设计确保了索引的明确性和一致性,避免因边界混淆导致的错误。

回到顶部