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

相关推荐
To_OC1 小时前
手写 AI 编程 Agent 的命令执行工具:我被 child_process 坑出来的实战经验
后端·node.js·agent
科技道人1 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
逝水无殇3 小时前
C# 异常处理详解
开发语言·后端·c#
玖玥拾5 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾5 小时前
Rust 学习目录
开发语言·学习·rust
考虑考虑6 小时前
Sentinel安装
java·后端·微服务
IT_陈寒6 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
云泽8086 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
碎碎念_4926 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
灯澜忆梦6 小时前
GO---可见性规则
开发语言·golang