package main
import "fmt"
func main() {
a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
b := a[1:3]
for i := 0; i < len(a); i++ {
fmt.Printf("%v%p\n", a[i], &a[i])
}
fmt.Println("-----我是河蟹----")
for i := 0; i < len(a); i++ {
fmt.Printf("%v%p\n", b[i], &b[i])
}
}
输出
无极剑圣00xc000058050
阿尔法突袭10xc000058060
高原血统20xc000058070
双重打击30xc000058080
冥想40xc000058090
-----我是河蟹----
阿尔法突袭10xc000058060
高原血统20xc000058070
我们发现,a中的“阿尔法突袭,高原血统“和b中的“阿尔法突袭,高原血统“的地址相同,故a和b他们用的是同一份,类似于,易大师说的,你的剑就是我的剑,它们2个相互影响同心同德住在同一个房子里,下面的例子也能证明这点
package main
import "fmt"
func main() {
a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
b := a[1:3]
a[1] = "d惩戒" //看这里只添加了这个
b[1] = "f闪现" //看这里只添加了这个
for i := 0; i < len(a); i++ {
fmt.Printf("%v%p\n", a[i], &a[i])
}
fmt.Println("-----我是河蟹----")
for i := 0; i < len(b); i++ {
fmt.Printf("%v%p\n", b[i], &b[i])
}
}
输出
无极剑圣00xc000058050
d惩戒0xc000058060
f闪现0xc000058070
双重打击30xc000058080
冥想40xc000058090
-----我是河蟹----
d惩戒0xc000058060
f闪现0xc000058070
要是a和b一直这样生活下去那该多好,但是b的要求无法得到满足,b一直在增加欲望
package main
import "fmt"
func main() {
a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
b := a[1:3]
a[1] = "d惩戒"
b[1] = "f闪现"
b = append(b, "先锋之眼")//看这里只添加了这个
b = append(b, "侦察守位")//看这里只添加了这个
for i := 0; i < len(a); i++ {
fmt.Printf("%v%p\n", a[i], &a[i])
}
fmt.Println("-----我是河蟹----")
for i := 0; i < len(b); i++ {
fmt.Printf("%v%p\n", b[i], &b[i])
}
fmt.Printf("a的长度%v容量%v\n", len(a), cap(a))//看这里只添加了这个
fmt.Printf("b的长度%v容量%v\n", len(b), cap(b))//看这里只添加了这个
}
输出
无极剑圣00xc0000d6000
d惩戒0xc0000d6010
f闪现0xc0000d6020
先锋之眼0xc0000d6030
侦察守位0xc0000d6040
-----我是河蟹----
d惩戒0xc0000d6010
f闪现0xc0000d6020
先锋之眼0xc0000d6030
侦察守位0xc0000d6040
a的长度5容量5
b的长度4容量4
可以发现a和b的地址依然用的是同一个,但a的宽容已经到极限了
package main
import "fmt"
func main() {
a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
b := a[1:3]
a[1] = "d惩戒"
b[1] = "f闪现"
b = append(b, "先锋之眼")
b = append(b, "侦察守位")
b = append(b, "神谕透镜")//看这里只添加了这个
for i := 0; i < len(a); i++ {
fmt.Printf("%v%p\n", a[i], &a[i])
}
fmt.Println("-----我是河蟹----")
for i := 0; i < len(b); i++ {
fmt.Printf("%v%p\n", b[i], &b[i])
}
fmt.Printf("a的长度%v容量%v\n", len(a), cap(a))
fmt.Printf("b的长度%v容量%v\n", len(b), cap(b))
}
输出
无极剑圣00xc000058050
d惩戒0xc000058060
f闪现0xc000058070
先锋之眼0xc000058080
侦察守位0xc000058090
-----我是河蟹----
d惩戒0xc000110000
f闪现0xc000110010
先锋之眼0xc000110020
侦察守位0xc000110030
神谕透镜0xc000110040
a的长度5容量5
b的长度5容量8
此时你发现a和b的地址是完全不同了,已经分开了,因为a的心再也放不下b了,b自己搬出来了,开辟了另一片地址,此时你再去改a或者b他们已经不会互相影响了,如下面的代码
package main
import "fmt"
func main() {
a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
b := a[1:3]
a[1] = "d惩戒"
b[1] = "f闪现"
b = append(b, "先锋之眼")
b = append(b, "侦察守位")
b = append(b, "神谕透镜")
a[1] = "无尽之刃"//添加了这里
b[1] = "灭世者的死亡之帽"//添加了这里
for i := 0; i < len(a); i++ {
fmt.Printf("%v%p\n", a[i], &a[i])
}
fmt.Println("-----我是河蟹----")
for i := 0; i < len(b); i++ {
fmt.Printf("%v%p\n", b[i], &b[i])
}
fmt.Printf("a的长度%v容量%v\n", len(a), cap(a))
fmt.Printf("b的长度%v容量%v\n", len(b), cap(b))
}
输出
无极剑圣00xc000058050
无尽之刃0xc000058060
f闪现0xc000058070
先锋之眼0xc000058080
侦察守位0xc000058090
-----我是河蟹----
d惩戒0xc000110000
灭世者的死亡之帽0xc000110010
先锋之眼0xc000110020
侦察守位0xc000110030
神谕透镜0xc000110040
a的长度5容量5
b的长度5容量8
你们说如果把b里面的”神谕透镜“删除,a和b还能破镜重圆,回到过去吗