Go面向对象编程思想

对象

  • 结构体就是对象
  • 显示声明对象的方法
    在这里插入图片描述

注意⚠️指针接收者和值接收者的区别:指针接收者可以修改接收者的值,而值接收者不能修改接收者的值。

type MyStruct struct {
    Field int
}
  1. 值接收者:当你使用值接收者定义方法时,Go会在每次调用这个方法时复制接收者。在方法内部,你可以修改接收者的字段,但这不会影响原始的接收者。因为你修改的是接收者的一个副本。
func (m MyStruct) SetValue(val int) {
    m.Field = val
}

func main() {
    s := MyStruct{}
    s.SetValue(5)
    fmt.Println(s.Field) // 输出 0,因为SetValue方法修改的是s的副本,不会影响s本身
}
  1. 指针接收者:当你使用指针接收者定义方法时,Go不会复制接收者,而是传递接收者的地址。因此,你可以在方法内部修改接收者的值。
func (m *MyStruct) SetValue(val int) {
    m.Field = val
}

func main() {
    s := &MyStruct{}
    s.SetValue(5)
    fmt.Println(s.Field) // 输出 5,因为SetValue方法修改的是s的值
}

三大特性

  • 小写就是封装(小写同一包;大写任意包)
// 定义一个结构体
type person struct {
    name string
    Age  int
}
  • 组合
type Animal struct {
    Name string
}

type Bird struct {
    Animal // 嵌入Animal结构体
    CanFly bool
}

func main() {
    b := Bird{
        Animal: Animal{Name: "Sparrow"},
        CanFly: true,
    }
    fmt.Println(b.Name)
    fmt.Println(b.CanFly)
}

  • 通过接口实现多态
type Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
}

type Rectangle struct {
    Width, Height float64
}

// Circle 实现了 Shape 接口
func (c *Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

// Rectangle 实现了 Shape 接口
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func printArea(s Shape) {
    fmt.Println(s.Area())
}

func main() {
    c := &Circle{Radius: 5} //💡Circle没有实现Shape接口,而是Circle的指针实现了Shape接口
    r := Rectangle{Width: 3, Height: 4}

    printArea(c) 
    printArea(r) 
}

设计模式五大原则

在这里插入图片描述

举例
  • 一个方法的动作应该是单一的!
    在这里插入图片描述

  • 不同对象(结构体)只是共有的同类方法 ===> 提取方法为接口!

  • 不同对象(结构体)拥有共同属性(或还有共同方法)===> 提取为父类结构体!
    在这里插入图片描述

企业级项目模块开发思想

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值