代码:
package main
import "fmt"
/*
go 语言支持类的操作,但是没有class关键字。使用struct模拟类。
*/
// 定义一个Person类
type Person struct {
// 属性
name string
age int
gender string
score float64
}
// 绑定一些方法
func (p *Person) Eat() {
/*
Eat 方法绑定到Person类中
指针形式的结构体,可以修改定义后的属性
*/
p.name = "Chen"
}
func (p Person) Drink() {
/*
Drink 方法绑定到Person类中
非指针形式的结构体,不可以修改定义后的属性
*/
p.name = "Zen"
}
func main() {
lily1 := Person{
name: "Lily",
age: 30,
gender: "female",
score: 100,
}
// 复制一个lily1对象
lily2 := lily1
fmt.Println("Eat方法,使用p *Person,修改name的值")
fmt.Println("修改前lily:", lily1)
lily1.Eat()
fmt.Println("修改后lily:", lily1)
fmt.Println("Drink方法,使用p Person,非指针")
fmt.Println("修改前lily:", lily2)
lily2.Drink()
fmt.Println("修改后lily:", lily2)
}
结果:
GOROOT=C:\Program Files\Go #gosetup
GOPATH=C:\gowork #gosetup
"C:\Program Files\Go\bin\go.exe" build -o C:\Users\ASUS\AppData\Local\Temp\GoLand\___go_build_02_struct_go.exe C:\gowork\src\02_struct.go #gosetup
C:\Users\ASUS\AppData\Local\Temp\GoLand\___go_build_02_struct_go.exe
Eat方法,使用p *Person,修改name的值
修改前lily: {Lily 30 female 100}
修改后lily: {Chen 30 female 100}
Drink方法,使用p Person,非指针
修改前lily: {Lily 30 female 100}
修改后lily: {Lily 30 female 100}