Go语言 类封装和绑定方法

本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。

目录

封装

绑定方法

类方法形参

指针形参

设置类方法参数

指针与非指针区别

总结


封装

go语言支持类的操作,但是没有class关键字,使用struct来模拟类。

示例如下:

Go 复制代码
type Person struct {
   // 成员属性
   name string
   age int
   gender string
   score float64
}

绑定方法

在类外面绑定类的方法,并创建一个类对象并打印和调用类方法。

示例如下:

Go 复制代码
func (p Person) Eat() {
   fmt.Println("Person is eating")
}

func main() {
   liyu := Person{
      name:   "liyu",
      age:    20,
      gender: "女",
      score:  88,
   }
   fmt.Println("liyu:", liyu)
   liyu.Eat()
}

类方法形参

指针形参

类方法的形参,可以是任意名称,也可以改为指针。

示例如下:

Go 复制代码
func (this Person) Eat() {
   fmt.Println("Person is eating")
   // 类的方法,可以使用自己的成员
   fmt.Println(this.name + " is eating")
}

设置类方法参数

设置类方法的参数,在调用时必须传递。

示例如下:

Go 复制代码
func (this *Person) Shop(num int) {
   fmt.Println(this.name + " is shoping")
   fmt.Println("shoping:", num)
}

func main() {
   liyu := Person{
      name:   "liyu",
      age:    20,
      gender: "女",
      score:  88,
   }
   fmt.Println("liyu:", liyu)
   liyu.Eat()
   liyu.Shop(1)
}

指针与非指针区别

类方法的形参指针与非指针参数的区别,通过修改类属性name来展示。

指针参数可以修改值,非指针的不可修改值。

示例如下:

Go 复制代码
func (p Person) Eat() {
   // fmt.Println("Person is eating")
   // 类的方法,可以使用自己的成员
   // fmt.Println(p.name + " is eating")
   p.name = "new_" + p.name
}

func (p *Person) Eat2() {
   p.name = "new_" + p.name
}

func (this *Person) Shop(num int) {
   fmt.Println(this.name + " is shoping")
   fmt.Println("shoping:", num)
}

func main() {
   liyu := Person{
      name:   "liyu",
      age:    20,
      gender: "女",
      score:  88,
   }
   liyu1 := liyu
   fmt.Println("Eat,使用p Person,修改name的值 ...")
   fmt.Println("修改liyu:", liyu)
   liyu.Eat()
   fmt.Println("修改后liyu:", liyu)

   fmt.Println("Eat2,使用p *Person,修改name的值 ...")
   fmt.Println("修改liyu1:", liyu1)
   liyu1.Eat2()
   fmt.Println("修改后liyu1:", liyu1)
}

运行结果:

bash 复制代码
Eat,使用p Person,修改name的值 ...
修改liyu: {liyu 20 女 88}
修改后liyu: {liyu 20 女 88}
Eat2,使用p *Person,修改name的值 ...
修改liyu1: {liyu 20 女 88}
修改后liyu1: {new_liyu 20 女 88}

总结

本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。

相关推荐
你的人类朋友13 小时前
说说签名与验签
后端
databook13 小时前
Manim实现脉冲闪烁特效
后端·python·动效
canonical_entropy16 小时前
AI时代,我们还需要低代码吗?—— 一场关于模型、演化与软件未来的深度问答
后端·低代码·aigc
颜如玉17 小时前
HikariCP:Dead code elimination优化
后端·性能优化·源码
考虑考虑17 小时前
Jpa使用union all
java·spring boot·后端
bobz96518 小时前
virtio vs vfio
后端
Rexi19 小时前
“Controller→Service→DAO”三层架构
后端
bobz96519 小时前
计算虚拟化的设计
后端
深圳蔓延科技19 小时前
Kafka的高性能之路
后端·kafka
Barcke19 小时前
深入浅出 Spring WebFlux:从核心原理到深度实战
后端