咔咔博客之面向对象
首先我们需要明确一个概念那就是什么是面向对象
面向对象简称OOP,是一种计算机编程架构,使用面向对象编程可以实现代码的重用性,灵活性,扩展性。
面向对象符合人类看待事物的一般规律。使其代码更简洁,更容易维护,并且具有更强的重用性
在PHP中面向对象的三大特性:封装、继承、多态
当然在go中也是一样的
在PHP中我们有类 但是在go使用的是结构体
基础案例
在之前我们所有的案例都是用这种方式在声明,那么下面我们改变一下方式
结构体案例(封装)
以上就是对基础代码的封装
这里就是需要注意一个点即可,那就是方法的主语一般定义为指针而不是值的形式。定义为值的缺陷在后期维护代码很困难。这个点我们在值的传递和引用传递那一节已经说过了
这里还有俩个符号一个是& 这个是取值的地址(地址也就是指针)
还有一个符号是* 这个是取指针的值
代码
package main
import "fmt"
/**
首先我们需要明确一个概念那就是什么是面向对象
面向对象简称OOP,是一种计算机编程架构,使用面向对象编程可以实现代码的重用性,灵活性,扩展性。
面向对象符合人类看待事物的一般规律。使其代码更简洁,更容易维护,并且具有更强的重用性
在PHP中面向对象的三大特性:封装、继承、多态
当然在go中也是一样的
在PHP中我们有类 但是在go使用的是结构体
*/
type Person struct {
name string
age int
like []string
}
func main() {
// 创建对象并通过对象的指针去访问对象的属性和方法
person := &Person{name: "咔咔", age: 24}
// {咔咔 24 []}
fmt.Println(*person)
// 咔咔
fmt.Println(person.name)
// 24
fmt.Println(person.age)
// 咔咔博客地址:blog.fangkang.top
person.eat()
// 咔咔手赚网地址:fangkang.top
person.play()
}
/**
无论方法的主语定义为指针还是值都是可以正常访问的
但是一般情况下我们都会把方法的主语定义为指针 因为传值的话是一个副本 指针是一个地址 这样在方法里边改变了属性的值 那么是通过这个地址去改变的
*/
func (p *Person) eat() {
fmt.Println("咔咔博客地址:blog.fangkang.top")
}
func (p *Person) play() {
fmt.Println("咔咔手赚网地址:fangkang.top")
}