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

相关推荐
喷火龙8号24 分钟前
MSC中的Model层:数据模型与数据访问层设计
后端·架构
5ycode29 分钟前
dify项目结构说明与win11本地部署
后端·开源
LaoZhangAI33 分钟前
GPT-image-1 API如何传多图:开发者完全指南
前端·后端
fouryears_2341740 分钟前
深入拆解Spring核心思想之一:IoC
java·后端·spring
codervibe43 分钟前
从 0 到 1,我如何独立开发一套教务系统(EduCore)
后端
error_cn44 分钟前
podman安全性设置
后端
一个热爱生活的普通人1 小时前
Go 泛型终极指南:告别 interface{},写出更安全、更强大的代码!
后端·go
求知摆渡1 小时前
从零开始搭建typecho
前端·后端
极客悟道1 小时前
彻底搞懂Java值传递:90%开发者都会踩的坑
前端·后端
坚持学习永不言弃1 小时前
FactoryBean 和 BeanFactory详解
后端