c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang函数方法

更新时间:2023-06-28

前言

在Go语言中,函数是一等公民,可以像变量一样被操作和传递。除了常规的函数以外,Go语言还引入了方法的概念。在本文中,我们将深入了解Go语言函数和方法的用法和规范。

1. 函数

函数是一段可重复使用的代码块,它接受一个或多个参数,并可能返回一个或多个结果。函数的定义使用关键字func,后面跟着函数的名称、参数列表和返回值列表。

例如:

func add(a, b int) int {
    return a + b
}

上面的代码定义了一个名为add的函数,它接受两个整数参数ab,并返回它们的和。

2. 方法

方法是与类型(可以是结构体、基本类型或接口)关联的函数。方法的定义类似于函数,但在方法名前面加上了接收者,即调用该方法的类型。

例如:

type Circle struct {
    radius float64
}

func (c Circle) calculateArea() float64 {
    return math.Pi * c.radius * c.radius
}

上面的代码定义了一个名为calculateArea的方法,它关联在Circle类型上。该方法接收一个Circle类型的接收者c,并返回计算出的面积。

3. 函数和方法的调用

在Go语言中,可以使用函数和方法的名称后面跟一对小括号进行调用,并传递相应的参数。

例如:

sum := add(3, 4)
fmt.Println(sum)

上面的代码调用了之前定义的add函数,并将返回值赋值给sum变量。然后,通过fmt.Println函数打印出sum的值。

对于方法的调用,需要先创建一个对应的类型的实例,并使用实例名来调用方法。

例如:

circle := Circle{radius: 5.0}
area := circle.calculateArea()
fmt.Println(area)

上面的代码创建一个半径为5的Circle实例circle,然后调用circlecalculateArea方法计算面积,并将结果赋值给area变量。最后,通过fmt.Println函数打印出area的值。

4. 使用指针作为方法接收者

在上述的方法定义中,Circle类型的实例作为方法的接收者时,传入的是该实例的一个副本。如果需要在方法内部修改接收者的内容,可以使用指针作为方法的接收者。

例如:

func (c *Circle) setRadius(radius float64) {
    c.radius = radius
}

上面的代码定义了一个名为setRadius的方法,接收者为*Circle类型的指针。该方法可以修改接收者cradius属性的值。

使用指针接收者调用方法时,可以直接使用实例名或者使用指针变量来调用。

例如:

circle := Circle{radius: 5.0}
circle.setRadius(10.0)
fmt.Println(circle.radius)

circlePointer := &circle
circlePointer.setRadius(15.0)
fmt.Println(circle.radius)

上面的代码首先创建了一个半径为5的Circle实例circle,然后调用setRadius方法将半径改为10。打印出的circle.radius为10。然后,使用指针变量circlePointer调用setRadius方法将半径改为15。再次打印出的circle.radius为15,说明指针接收者的方法可以修改接收者的属性。