package main
import"fmt"type people struct{
Name string
Age int8}funcmain(){var myName = people{Name:"shanwen", Age:23}
fmt.Printf("myName的内存地址是%p\n",&myName)//myName的内存地址是0xc000010030
testArray :=[1]people{myName}
fmt.Printf("数组内myName的内存地址是%p\n",&testArray[0])//数组内myName的内存地址是0xc000010048}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2.5: 循环遍历出来的变量也是原来变量的副本
package main
import"fmt"type People struct{
Name string
Age int8}var thisPeople = People{Name:"renshanwen", Age:35}funcmain(){
array :=[...]People{thisPeople, thisPeople, thisPeople}
fmt.Printf("数组中的首个变量所在内存中的地址是: %p, \n",&array[0])//数组中的首个变量所在内存中的地址是: 0xc0000b6000for i, item :=range array {if i ==0{
fmt.Printf("遍历出的变量的内存地址是: %p, \n",&item)//遍历出的变量的内存地址是: 0xc0000a0018}}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2.6: 函数类型本质也是指针类型
package main
import"fmt"funcmain(){
f1 :=func(i int){}
fmt.Printf("f1:\t\t %+v, \t\t内存地址:%p\n", f1,&f1)
f2 := f1
fmt.Printf("f2:\t\t %+v, \t\t内存地址:%p\n", f2,&f2)}// f1: 0x108e680, 内存地址:0xc000100018// f2: 0x108e680, 内存地址:0xc000100028
1
2
3
4
5
6
7
8
9
10
11
12
2.7: 管道中发送对象, 这个对象也是副本
package main
import"fmt"type Bird struct{
Age int
Name string}var parrot1 = Bird{Age:1, Name:"Blue"}funcmain(){
ch :=make(chan Bird,3)
fmt.Printf("parrot1:\t\t %+v, \t\t内存地址:%p\n", parrot1,&parrot1)//parrot1: {Age:1 Name:Blue}, 内存地址:0x1139250
ch <- parrot1
parrot1.Age =2
p :=<-ch
fmt.Printf("parrot%d:\t\t %+v, \t\t内存地址:%p\n",2, p,&p)//parrot2: {Age:1 Name:Blue}, 内存地址:0xc000010048}