Go学习笔记-面向对象struct成员变量

结构体struct可以用来描述一组数据值,这组值的本质即可以是原始的,也可以是非原始的。是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似javaphp中的class,是golang面向对象编程的基础类型。
今天我们先来看看golang中的成员变量的实现。

基本的属性(成员变量)
type Teacher struct {  
  Name string  
  age int  
  Sex string
}  
func Create() Teacher {  
   cang := Teacher{Name:"teacher cang",age:20,Sex:"woman"}  
   return cang  
}

对于在上面结构体teacher其实我们可以把它看成一个className,Sex是可以被外部(其他的包)访问的公有变量,而age则只能在包内部被访问。

Method(成员方法)
type Student struct {  
  Name string  
  Sex string  
  Age int  
}  
func (student *Student) SetName(name string)  {  
   student.Name = name  
}  
func (student *Student) GetName() string {  
   return student.Name  
}  
func XiaoPeng()  {  
   xiaoPeng := Student{}  
   xiaoPeng.SetName("xiao peng")  
   fmt.Println(xiaoPeng.GetName()) //xiao peng  
}

golang中为struct声明成员方法,只需要在func指定当前func属于的struct即可。
上面可以看到我们在指定struct的时候,传入的是一个指针。那么可不可以不传指针呢?当然是可以的,但是这个时候我们得到的是一个原结构体的一个副本。

type Student struct {  
  Name string  
  Sex string  
  Age int  
}  
func (student Student) SetAge(number int)  {  
   student.Age = number  
  fmt.Println(student.Age)  //21
}  
  
func (student *Student) GetAge() int {  
   return student.Age  
}  
func XiaoPeng()  {  
   xiaoPeng := Student{}  
   xiaoPeng.SetAge(21)  
   fmt.Println(xiaoPeng.GetAge()) //0   
}

可以看到如果在SetAge内部是可以访问当前的age赋值。但是在外部是获取不到age的值的。其实在SetAge中是对xiaoPeng的一个副本拷贝复制,相当于值传递

期待一起交流

qrcode_for_gh_60813539dc23_258.jpg

你可能感兴趣的:(golang,oop,method,struct)