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. 如果类的属性首字母大写,表示该属性对外是能够访问的,否则的话,只能类的内部访问。
相关推荐
0xDevNull7 分钟前
MySQL数据冷热分离详解
后端·mysql
AI袋鼠帝14 分钟前
OpenClaw(龙虾)最强开源对手!Github 40K Star了,又一个爆火的Agent..
后端
lly20240623 分钟前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨25 分钟前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn99925 分钟前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏49428 分钟前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n1 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨1 小时前
python扫码登录dy
开发语言·python
我是唐青枫1 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
JJay.1 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin