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

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
ttwuai2 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
大勇前进2 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu2 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile2 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go