go语言(十)---- 面向对象封装

面向对象的封装

go 复制代码
package main

import "fmt"

type Hero struct {
	Name string
	Ad  int
	Level int
}

func (this Hero)  Show(){

	fmt.Println("Name = ", this.Name)
	fmt.Println("Ad = ", this.Ad)
	fmt.Println("Level = ", this.Level)

}

func (this Hero) GetName() string {

	return this.Name

}

func (this Hero) SetName(newName string)  {

	//this 是调用该方法的对象的一个副本
	this.Name = newName

}

func main() {

	//创建一个对象
	hero := Hero{Name: "zhang3",Ad: 100,Level:1}
    hero.Show()
	hero.SetName("Li4")
	fmt.Println("------------修改后------------")
	hero.Show()
}

可以看出修改后,li4,数据并没有变化

如果加入指针,进行li4的修改后,数据会发生变化

go 复制代码
package main

import "fmt"

type Hero struct {
	Name string
	Ad  int
	Level int
}

func (this *Hero)  Show(){

	fmt.Println("Name = ", this.Name)
	fmt.Println("Ad = ", this.Ad)
	fmt.Println("Level = ", this.Level)

}

func (this *Hero) GetName() string {

	return this.Name

}

func (this *Hero) SetName(newName string)  {

	//this 是调用该方法的对象的一个副本
	this.Name = newName

}

func main() {

	//创建一个对象
	hero := Hero{Name: "zhang3",Ad: 100,Level:1}
    hero.Show()
	hero.SetName("Li4")
	fmt.Println("------------修改后------------")
	hero.Show()
}
  1. 如果首字母大写,表示其他包也能够访问
  2. 如果类的属性首字母大写,表示该属性对外是能够访问的,否则的话,只能类的内部访问。
相关推荐
音符犹如代码2 分钟前
Docker 一键部署带有 TimescaleDB 插件的 PostgreSQL
java·运维·数据库·后端·docker·postgresql·容器
程序leo源5 分钟前
Qt信号与槽深度详解
c语言·开发语言·数据库·c++·qt·c#
水云桐程序员6 分钟前
C++数组详细介绍
开发语言·c++
LucianaiB8 分钟前
从模型护栏到工程门禁:基于 XGuard 二创一个 Agent/CI 动态策略安全护栏
后端
码界筑梦坊10 分钟前
123-基于Python的特斯拉超级充电站分布数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi
AI人工智能+电脑小能手14 分钟前
【大白话说Java面试题 第56题】【JVM篇】第16题:JVM有哪些垃圾收集器?
java·开发语言·jvm·面试
铁皮饭盒21 分钟前
同样是算力巨头,为什么华为死磕英伟达,AMD 却 "躺平看戏"?
前端·后端
文心快码BaiduComate21 分钟前
用Comate 7天完成”鹅鸭杀”游戏网站开发
前端·后端·程序员
2401_8654396325 分钟前
CSS中隐藏元素的多重技巧与应用场景
开发语言·前端·javascript
倚栏听风雨33 分钟前
Spring AI Alibaba 接入 OpenAI 兼容协议第三方大模型实战
后端