在 Golang 中,自定义类型方法是指为用户定义的类型(如结构体)添加的方法。这些方法可以用来操作或访问该类型的实例。以下是如何在 Golang 中定义和使用自定义类型方法的步骤和示例:
定义自定义类型和方法
- 定义结构体:首先,定义一个结构体来表示自定义类型。
- 定义方法:使用方法接收者(receiver)来定义方法。方法接收者可以是值接收者或指针接收者。
示例:
Golang 示例,如何为自定义类型定义方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| package main
import "fmt"
// 定义一个结构体
type 人 struct {
名字 string
年龄 int
}
// 为结构体定义方法
func (p 人) 打招呼() {
fmt.Printf("你好,我叫 %s,我今年 %d 岁。\n", p.名字, p.年龄)
}
// 使用指针接收者来修改结构体的字段
func (p *人) 设置年龄(新年龄 int) {
p.年龄 = 新年龄
}
func main() {
// 创建结构体的实例
人1 := 人{"小明", 25}
// 调用方法
人1.打招呼() // 输出: 你好,我叫 小明,我今年 25 岁。
人1.设置年龄(26)
人1.打招呼() // 输出: 你好,我叫 小明,我今年 26 岁。
}
|
关键点:
方法接收者:在方法名前定义接收者,(p 人)
表示方法接收者是 人
类型的一个实例。
值接收者与指针接收者:值接收者不会修改原始实例,而指针接收者可以修改实例的字段。
结构体类型是值类型,方法调用中,遵守值类型的传递机制,是值拷贝传递方式,想改变可以用结构体指针方式来处理
方法调用:通过实例调用方法,类似于面向对象编程中的方法调用。
Golang中的方法作用在指定的数据类型上的,和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct,比如int , float32等都可以有方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package main import "fmt"
type integer int func (i integer) print(){
i = 30
fmt.Println("i = ",i)
}
func (i *integer) change(){
*i = 30
fmt.Println("i = ",*i)
}
func main(){
var i integer = 20
i.print()
i.change()
fmt.Println(i)
}
|