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. 如果类的属性首字母大写,表示该属性对外是能够访问的,否则的话,只能类的内部访问。
相关推荐
快乐柠檬不快乐3 分钟前
C++中的代理模式实现
开发语言·c++·算法
良木生香6 分钟前
【C++初阶】:C++类和对象(上):类的定义 & 类的实例化 & this指针
c语言·开发语言·c++
JavaGuide10 分钟前
美团面试:为什么要用分布式缓存?本地缓存呢?多级缓存一致性如何保证?
数据库·redis·后端·缓存·大厂面试
JavaGuide13 分钟前
为什么要用分布式缓存?本地缓存呢?多级缓存一致性如何保证?
redis·后端
会编程的土豆15 分钟前
【影院票务管理系统】
开发语言
yuanlaile17 分钟前
2026后端趋势:Java 老了?Go 才是未来?
java·后端·golang·go与java·后端学什么
我爱娃哈哈25 分钟前
SpringBoot + 事件溯源 + CQRS:高一致性与高性能读写分离架构
后端
笨笨马甲29 分钟前
Qt 嵌入式开发快速搭建交叉编译环境
开发语言·qt
春日见29 分钟前
Matlab快速入门 基础语法教学
java·开发语言·驱动开发·matlab·docker·计算机外设
张人玉29 分钟前
C# 中的 MVC、MVP、MVVM 模式详解
开发语言·c#·mvc·mvvm·mvp