在 Golang 中,自定义类型方法是指为用户定义的类型(如结构体)添加的方法。这些方法可以用来操作或访问该类型的实例。以下是如何在 Golang 中定义和使用自定义类型方法的步骤和示例:

定义自定义类型和方法

  1. 定义结构体:首先,定义一个结构体来表示自定义类型。
  2. 定义方法:使用方法接收者(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"

// 定义一个结构体
typestruct {
    名字 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)
}