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. 如果类的属性首字母大写,表示该属性对外是能够访问的,否则的话,只能类的内部访问。
相关推荐
初学AI的小高19 分钟前
Agent 工具太多怎么办:BM25 检索、依赖补全与按需加载实战
后端·agent
用户66026761187921 分钟前
AI 代码上线前的第 24 道门禁:上线失败时,怎样在 10 分钟内退回?
后端·架构
总要学点什么23 分钟前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
NishikiAsumi072125 分钟前
一次170万行的导出:sql优化远没有加索引这么简单
后端
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
xjz18422 小时前
Rust 注释:从 // 到 rustdoc
后端
Funlang2 小时前
龙芯上的 Fun:从跑起来到机器码
开发语言·龙芯
总要学点什么2 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
旖旎夜光2 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
ShineWinsu3 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页