结构体
- 结构体界说的函数分为值接收者方法和指针接收者方法
- 调用方式:
- 使用值接收者的方法可以通过值或指针调用。
- 使用指针接收者的方法必须通过指针调用。(不对,值对象调用指针方法时会自动转化为指针对象,所以使用指针接收者的方法可以通过值或指针调用)
- 方法内部对接收者的修改:
- 如果方法必要修改接收者的值,则必须使用指针接收者。
- 如果方法不必要修改接收者,可以使用值接收者。
- 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函数来实例化,类似于构造函数(工厂模式)
- 先声明结构体变量,再逐个字段赋值
- 直接创建匿名结构体的实例,无需提前界说结构体范例,适用于一次性使用的简单数据
继续
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |