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语言类相关操作:封装和绑定方法介绍及示例。

相关推荐
teeeeeeemo4 分钟前
回调函数 vs Promise vs async/await区别
开发语言·前端·javascript·笔记
加油吧zkf8 分钟前
AI大模型如何重塑软件开发流程?——结合目标检测的深度实践与代码示例
开发语言·图像处理·人工智能·python·yolo
Java技术小馆10 分钟前
GitDiagram如何让你的GitHub项目可视化
java·后端·面试
ac.char15 分钟前
Golang读取ZIP压缩包并显示Gin静态html网站
golang·html·gin
ejinxian23 分钟前
PHP 超文本预处理器 发布 8.5 版本
开发语言·php
星星电灯猴34 分钟前
iOS 性能调试全流程:从 Demo 到产品化的小团队实战经验
后端
程序无bug43 分钟前
手写Spring框架
java·后端
JohnYan1 小时前
模板+数据的文档生成技术方案设计和实现
javascript·后端·架构
软件黑马王子1 小时前
C#系统学习第八章——字符串
开发语言·学习·c#
阿蒙Amon1 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#