当我运行下面的代码时,我收到编译器错误,说不支持索引。
txs := make([]string, 2)
txs[0] = "A"
p := &txs
fmt.Println(p[0])
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么不支持对切片指针进行索引。我可以将指针变量复制到值变量,然后进行索引,但我很好奇为什么该语言不支持对切片指针进行索引;这样做会很方便。或者有没有我不知道的方法?请让我知道你的想法。
pet*_*rSO 24
写入(*p)以取消引用指针p:
package main
import (
"fmt"
)
func main() {
txs := make([]string, 2)
txs[0] = "A"
p := &txs
fmt.Println((*p)[0])
}
Run Code Online (Sandbox Code Playgroud)
游乐场:https : //play.golang.org/p/6Ex-3jtmw44
输出:
A
Run Code Online (Sandbox Code Playgroud)
那里发生了一个抽象,语言设计者选择不将其应用于指针。出于一些实际原因,这可能是由于指针不指向数组的开头(如内存块。如果您熟悉索引,这通常是通过类似的方法来完成的startingAddress + index * sizeof(dataType))。因此,当您拥有值类型时,它已经提供了一个抽象来隐藏发生的额外间接层。我认为语言作者认为当你有一个指向切片对象的指针时这样做是没有意义的,因为它指向实际的内存,这会产生很大的误导。它已经引起了一些混乱,但对于很多开发人员来说,他们可能永远不会意识到这种抽象的存在(就像在大多数情况下,在切片与数组上操作时,语法没有明显的差异)。
| 归档时间: |
|
| 查看次数: |
5428 次 |
| 最近记录: |