func varMem() {
var a int32 = 100
fmt.Printf("addr %p\n",&a)
}
func pointMem() {
var b int32
b = 32
var a *int32
fmt.Printf("addr of a:%v\ntype of a %T\n",a,a) //取出a的地址和类型
a = &b
fmt.Printf("a %d addr:%p\ntype of a:%T\nb %d addr %p\n",*a,&a,a,b,&b)
}
&
: 取地址*
: 取指针对应的值func pointMem1() {
var a *int
b := 200
a = &b
*a = 400
fmt.Printf("a=%v,adda=%p,type a=%#T\nb=%v,addb=%p,type b=%#T\n",*a,a,a,b,&b)
}
func pointMem2() {
var a *int
var b int = 100
if a == nil {
a = &b
}
fmt.Printf("addr a=%p,value a=%d\naddr b=%p,value b=%d\n",a,*a,&b,b)
}
猜输出
func modify(a int) {
a = 1000
}
func modify2(a *int) {
fmt.Printf("address of a: %p\n",&a)
*a = 1000
}
func main() {
var b int = 100
modify(b)
fmt.Printf("b=%d\n",b)
var p *int = &b
fmt.Printf("address of p: %p\n",&p)
modify2(&b)
fmt.Printf("b=%d\n",b)
}
func modifyArray(arr *[3]int) {
//经过修改之后的arr,成了引用类型而不是值类型,因为其内存地址保持一致
fmt.Printf("2. arr=%#v,address=%p\n",*arr,&arr)
(*arr)[0] = 90
fmt.Printf("3. arr=%#v,address=%p\n",*arr,&arr)
}
func main() {
a := [3]int{89,90,91}
modifyArray(&a)
fmt.Printf("1. arr=%#v,addreess=%p\n",a,&a)
}
func modifySlice(a []int) {
fmt.Printf("2.slice=%v,address=%p\n",a,&a)
a[0] = 90
fmt.Printf("3.slice=%v,address=%p\n",a,&a)
}
func main() {
a := []int{89,90,91}
modifySlice(a)
fmt.Printf("1. silce=%#v,address=%p\n",a,&a)
}
func newPoints() {
var p *int = new(int)
fmt.Printf("p=%v,address=%p\n",p,&p)
*p = 100
fmt.Printf("p=%v,address=%p\n",*p,&p)
}
type User struct {
Name string
Age int
}
func StructPoint() {
var pUser *User = new(User)
pUser.Name = "alex"
pUser.Age = 19
fmt.Printf("user:%v\n",*pUser)
}
func newSlice() {
var p *[]int = new([]int)
*p = make([]int,10)
(*p)[0] = 100
fmt.Printf("p=%v,address=%p\n",*p,&p)
}
func newMap() {
var p *map[string]int = new(map[string]int)
*p = make(map[string]int)
(*p)["key1"] = 100
(*p)["key2"] = 200
fmt.Printf("p=%v,address=%p\n",*p,&p)
}
func main() {
newPoints()
StructPoint()
newSlice()
newMap()
}
func valueCopy() {
a := 10
b := a
fmt.Printf("a=%d,address a=%p,b=%d,address b=%p\n",a,&a,b,&b)
c := 10
d := &c
fmt.Printf("c=%d,address c=%p,d=%d,address d=%p\n",c,&c,*d,d)
}
type Students struct {
Name string
Age int
}
//定义了值类型为Students的方法
func (s Students) GetName() string{
return s.Name
}
//修改需要指针类型的方法
func (s *Students) SetName(name string) {
s.Name = name
}
func main() {
var s1 Students = Students{
Name:"s1",
Age:12,
}
name := s1.GetName()
fmt.Printf("name=%s\n",name)
//修改name
s1.SetName("s2")
name = s1.GetName()
fmt.Printf("name=%s\n",name)
}
//定义一个integer类型
type Integer int64
func (i Integer) Print() {
fmt.Printf("i=%d\n",i)
}
func (i *Integer) Set(b int64) {
*i = Integer(b)
}
func main() {
var a Integer
a = 1000
fmt.Printf("a=%d\n",a)
var b int64 = 500
a = Integer(b)
fmt.Printf("a=%d\n",a)
a.Print()
a.Set(10000)
a.Print()
}
//定义一个integer类型
type Integer int64
func (i *Integer) Print() {
fmt.Printf("i=%d\n",*i)
}
func (i *Integer) Set(b int64) {
*i = Integer(b)
}
func main() {
var a Integer
a = 1000
fmt.Printf("a=%d\n",a)
var b int64 = 500
a = Integer(b)
fmt.Printf("a=%d\n",a)
a.Print()
a.Set(10000)
a.Print()
}
type Users struct {
s1 [100000000]int64
s2 [100000000]int64
s3 [100000000]int64
s4 [100000000]int64
}
func (u *Users) SetValue() {
for i :=0;i<len(u.s1);i++ {
u.s1[i] = 1
u.s2[i] = 1
u.s3[i] = 1
u.s4[i] = 1
}
}
func main() {
var u *Users = new(Users)
start := time.Now().UnixNano()
u.SetValue()
end := time.Now().UnixNano()
fmt.Printf("总耗时:%v ms\n",(end-start)/1000000)
}
type Animal struct {
Name string
Age int
}
func (a *Animal) SetName(name string) {
a.Name = name
}
func (a *Animal) SetAge(age int) {
a.Age = age
}
func (a *Animal) Print() {
fmt.Printf("a.name=%s a.age=%d\n",a.Name,a.Age)
}
type Brids struct {
//继承父类,使用指针,初始化的时候也需要初始化父类
*Animal
}
func (b *Brids) Fly() {
fmt.Printf("name %s is flying \n",b.Name)
}
func main() {
//继承父类,使用指针,初始化的时候也需要初始化父类
var b *Brids = &Brids{
&Animal{},
}
//继承了父类的方法
b.SetName("birds")
b.SetAge(12)
//调用自己的方法
b.Fly()
}
type Animal struct {
Name string
Age int
}
func (a *Animal) SetName(name string) {
a.Name = name
}
func (a *Animal) SetAge(age int) {
a.Age = age
}
func (a *Animal) Print() {
fmt.Printf("a.name=%s a.age=%d\n",a.Name,a.Age)
}
type Brids struct {
//继承父类,使用指针,初始化的时候也需要初始化父类
*Animal
}
func (b *Brids) Fly() {
fmt.Printf("name %s is flying \n",b.Name)
}
func main() {
//继承父类,使用指针,初始化的时候也需要初始化父类
var b *Brids = &Brids{
&Animal{},
}
//继承了父类的方法
b.SetName("birds")
b.SetAge(12)
//调用自己的方法
b.Fly()
// json序列化
data,err := json.Marshal(b)
fmt.Printf("marshal result:%s,error :%v\n",data,err)
//反序列化:变成结构体
var c Brids
json.Unmarshal(data,&c)
fmt.Printf("%#v\n",c.Animal)
}