golang函数方法
更新时间:2023-06-28前言
在Go语言中,函数是一等公民,可以像变量一样被操作和传递。除了常规的函数以外,Go语言还引入了方法的概念。在本文中,我们将深入了解Go语言函数和方法的用法和规范。
1. 函数
函数是一段可重复使用的代码块,它接受一个或多个参数,并可能返回一个或多个结果。函数的定义使用关键字func
,后面跟着函数的名称、参数列表和返回值列表。
例如:
func add(a, b int) int {
return a + b
}
上面的代码定义了一个名为add
的函数,它接受两个整数参数a
和b
,并返回它们的和。
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
,然后调用circle
的calculateArea
方法计算面积,并将结果赋值给area
变量。最后,通过fmt.Println
函数打印出area
的值。
4. 使用指针作为方法接收者
在上述的方法定义中,Circle
类型的实例作为方法的接收者时,传入的是该实例的一个副本。如果需要在方法内部修改接收者的内容,可以使用指针作为方法的接收者。
例如:
func (c *Circle) setRadius(radius float64) {
c.radius = radius
}
上面的代码定义了一个名为setRadius
的方法,接收者为*Circle
类型的指针。该方法可以修改接收者c
的radius
属性的值。
使用指针接收者调用方法时,可以直接使用实例名或者使用指针变量来调用。
例如:
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,说明指针接收者的方法可以修改接收者的属性。