我正在学习Go语言,我对此页面中的一个片段有疑问
修改代码以获取一些细节:
package main
import "fmt"
import "math/rand"
func main() {
rand.Seed(1)
primes := [6]int{2, 3, 5, 7, 11, 13}
x := 0
y := x + 1 + rand.Intn(2)
fmt.Println(x, y)
var s []int = primes[x:y]
fmt.Println(s)
fmt.Printf("%p\n", &primes)
fmt.Printf("%p\n", &s)
s[0] = 123
fmt.Println(primes)
fmt.Println(s)
}
结论:
0 2
[2 3]
0x104401c0
0x1040a150
[123 3 5 7 11 13]
[123 3]
首先我检查了是否可以制作动态切片。该代码显示了可能的情况。然后我决定找出切片是如何实现的。这里的问题是:为什么对数组的引用s和primes不同,而如果你改变数组的值s,然后改变和primes?在go中,事实证明,不是纯数组,而是带有附加信息的结构之类的东西?
PS 我能以某种方式找出go(&s - &primes- 不起作用)中链接之间的距离吗?
1 个回答