package main
import "fmt"
//定义结构体
type Persion struct {
//定于结构体属性
name string
age int
sex bool
hobby []string
}
/*
封装结构体的方法
- 无论方法的主语定于为止类型还是指针类型,对象值和对象指针都能够正常访问
-通常会将主语定义为指针累
*/
func (p Persion) Eat() {
fmt.Printf("%s爱饕餮\n", p.name)
}
func (p Persion) Drink() {
fmt.Printf("%s爱喝酒\n", p.name)
}
func (p Persion) Love() {
fmt.Printf("%s是有感情的\n", p.name)
}
func MakeHimlove(p Persion) {
p.Love()
}
func MakeHisLove(p *Persion) {
p.Love()
}
func main01() {
//创建空白的Persion 对象(object)/实例(instance)
rangge := Persion{}
//设置其属性
rangge.name = "让哥"
//访问其方法
rangge.Eat()
rangge.Drink()
rangge.Love()
}
func main012() {
//创建对象是给指定属性赋值,可以不必全部赋值
//rangge := Persion{name: "西门阿让", sex: true, age: 9}
//创建对象时按顺序给所有属性赋值
rangge := Persion{"西门阿让", 8, true, []string{"撸代码"}}
rangge.Eat()
}
func main() {
rangge := Persion{"西门阿让", 8, true, []string{"撸代码"}}
//要求传递值就必须传递值
MakeHimlove(rangge)
//要求传递指针就必须传递指针/地址/引用
MakeHisLove(&rangge)
//值传递传递的是副本,引用传递传的才是真身
}