结构体struct
可以用来描述一组数据值,这组值的本质即可以是原始的,也可以是非原始的。是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似java
,php
中的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
其实我们可以把它看成一个class
而Name
,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
的一个副本拷贝复制,相当于值传递
。
期待一起交流
有疑问加站长微信联系(非本文作者)