面向对象的封装
package mainimport "fmt"type Hero struct {Name stringAd intLevel 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的修改后,数据会发生变化
package mainimport "fmt"type Hero struct {Name stringAd intLevel 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()
}
- 如果首字母大写,表示其他包也能够访问
- 如果类的属性首字母大写,表示该属性对外是能够访问的,否则的话,只能类的内部访问。