ToB企服应用市场:ToB评测及商务社交产业平台
标题:
go类(结构体)和对象
[打印本页]
作者:
王海鱼
时间:
昨天 19:28
标题:
go类(结构体)和对象
结构体
结构体界说的函数分为值接收者方法和指针接收者方法
调用方式:
使用值接收者的方法可以通过值或指针调用。
使用指针接收者的方法必须通过指针调用。(不对,值对象调用指针方法时会自动转化为指针对象,所以使用指针接收者的方法可以通过值或指针调用)
方法内部对接收者的修改:
如果方法必要修改接收者的值,则必须使用指针接收者。
如果方法不必要修改接收者,可以使用值接收者。
type Person struct { name string }
func (p Person) Speak1() string { return "Hello, my name is " + p.name }
func (p *Person) Speak2() string { return "Hello, my name is " + p.name }
pp:=Person{"my_name"}
pp.Speak1() // 正确
pp.Speak2() // 错误
复制代码
实例化
结构体实例化对象方式:
直接通过结构体名和字段名初始化,返回值范例
直接new,返回指针范例
对于复杂的类,写一个NewStructname() *Structname函数来实例化,类似于构造函数(工厂模式)
先声明结构体变量,再逐个字段赋值
直接创建匿名结构体的实例,无需提前界说结构体范例,适用于一次性使用的简单数据
继续
go里面的继续其实是组合。
type Animal struct { Name string }
type Dog struct {
Animal // 嵌入(继承) Animal 类型
Breed string
}
复制代码
继续方式
指针继续
值继续
type Animal struct {}
func (a *Animal) Speak() {
fmt.Println("Animal speaks")
}
type Cat struct {
*Animal
}
type Cat struct { // 无法调用Speak方法,因为Speak方法是指针接收者方法
Animal
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4