【golang笔记】go_结构体struct(12)

Page content

这一篇简单的整理了golang 结构体struct 相关的内容。

1.结构体struct的内存结构

下面的例子可以简单的说明结构体的内存结构

package main

import "fmt"

type A struct {
 x int
 y int
 z int
}

func main() {
 a := A{x: 10, y: 20, z: 30}
 fmt.Printf("a的地址=%p\n", &a)   //a的地址=0xc0000b6000  结构体的地址和第一个字段的地址是一样的
 fmt.Printf("x的地址=%p\n", &a.x) //x的地址=0xc0000b6000  结构体的个字段之间的相差是 类型的的大小
 fmt.Printf("y的地址=%p\n", &a.y) //y的地址=0xc0000b6008
 fmt.Printf("z的地址=%p\n", &a.z) //z的地址=0xc0000b6010

}

2.工厂模式

引用了一个包,但是那个包里的结构体是小写的时候,可以用工厂模式解决。

models

package models

type student struct {
 Name string
 age  int
}

func NewStudent(name string, age int) *student {
 return &student{
  Name: name,
  age:  age,
 }
}

func (s *student) GetAge() int {
 return s.age
}

main

package main

import (
 "fmt"
 "testCode/test/models"
)

func main() {
 student := models.NewStudent("张三", 19)
 fmt.Println(student)           //&{张三 19}
 fmt.Println(student.Name)      //张三
 fmt.Println(student.GetAge())  //19
}

欢迎大家的意见和交流

email: li_mingxie@163.com