跳转至

方法


定义

函数名称加入一个额外的参数(接收方)

Go
1
2
3
func (variable var_type) MethodName(parameters ...) {
    // method functionality
}

示例

Go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
//创建一个名为 triangle 的三角形结构
type triangle struct {
    size int
}
//创建计算方法
func (t triangle) perimeter() int {
    return t.size * 3
}
//调用方法
func main() {
    t := triangle{3}
    fmt.Println("Perimeter:", t.perimeter())
}

方法中的指针

当需要修改接收方数据时,可以在方法中使用指针

Go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
func (t *triangle) doubleSize() {
    t.size *= 2
}

func main() {
    t := triangle{3}
    t.doubleSize()
    fmt.Println("Size:", t.size)
    fmt.Println("Perimeter:", t.perimeter())
}

声明其他类型的方法

方法需要为任何类型定义方法
基本类型(如 string)无法创建方法

Go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
package main

import (
    "fmt"
    "strings"
)

type upperstring string

func (s upperstring) Upper() string {
    return strings.ToUpper(string(s))
}

func main() {
    s := upperstring("Learning Go!")
    fmt.Println(s)
    fmt.Println(s.Upper())
}