本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。
目录
封装
go语言支持类的操作,但是没有class关键字,使用struct来模拟类。
示例如下:
Go
type Person struct {
// 成员属性
name string
age int
gender string
score float64
}
绑定方法
在类外面绑定类的方法,并创建一个类对象并打印和调用类方法。
示例如下:
Go
func (p Person) Eat() {
fmt.Println("Person is eating")
}
func main() {
liyu := Person{
name: "liyu",
age: 20,
gender: "女",
score: 88,
}
fmt.Println("liyu:", liyu)
liyu.Eat()
}
类方法形参
指针形参
类方法的形参,可以是任意名称,也可以改为指针。
示例如下:
Go
func (this Person) Eat() {
fmt.Println("Person is eating")
// 类的方法,可以使用自己的成员
fmt.Println(this.name + " is eating")
}
设置类方法参数
设置类方法的参数,在调用时必须传递。
示例如下:
Go
func (this *Person) Shop(num int) {
fmt.Println(this.name + " is shoping")
fmt.Println("shoping:", num)
}
func main() {
liyu := Person{
name: "liyu",
age: 20,
gender: "女",
score: 88,
}
fmt.Println("liyu:", liyu)
liyu.Eat()
liyu.Shop(1)
}
指针与非指针区别
类方法的形参指针与非指针参数的区别,通过修改类属性name来展示。
指针参数可以修改值,非指针的不可修改值。
示例如下:
Go
func (p Person) Eat() {
// fmt.Println("Person is eating")
// 类的方法,可以使用自己的成员
// fmt.Println(p.name + " is eating")
p.name = "new_" + p.name
}
func (p *Person) Eat2() {
p.name = "new_" + p.name
}
func (this *Person) Shop(num int) {
fmt.Println(this.name + " is shoping")
fmt.Println("shoping:", num)
}
func main() {
liyu := Person{
name: "liyu",
age: 20,
gender: "女",
score: 88,
}
liyu1 := liyu
fmt.Println("Eat,使用p Person,修改name的值 ...")
fmt.Println("修改liyu:", liyu)
liyu.Eat()
fmt.Println("修改后liyu:", liyu)
fmt.Println("Eat2,使用p *Person,修改name的值 ...")
fmt.Println("修改liyu1:", liyu1)
liyu1.Eat2()
fmt.Println("修改后liyu1:", liyu1)
}
运行结果:
bash
Eat,使用p Person,修改name的值 ...
修改liyu: {liyu 20 女 88}
修改后liyu: {liyu 20 女 88}
Eat2,使用p *Person,修改name的值 ...
修改liyu1: {liyu 20 女 88}
修改后liyu1: {new_liyu 20 女 88}
总结
本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。