go 方法和函数的区别
图片中的内容总结了Go语言中方法和函数的区别,主要分为三个方面:
-
调用方式不同:
- 函数的调用方式:
函数名(实参列表) - 方法的调用方式:
变量.方法名(实参列表)
- 函数的调用方式:
-
普通函数的接收者类型限制:
- 对于普通函数,如果接收者是值类型,则不能将指针类型的数据直接传递给它;反之亦然。
-
方法的接收者类型灵活性:
- 对于方法(如结构体的方法),如果接收者是值类型,可以直接使用指针类型的变量来调用该方法;反过来同样也可以。
示例说明
1. 调用方式不同
-
函数示例:
func add(a int, b int) int { return a + b } result := add(1, 2) fmt.Println(result) // 输出: 3 -
方法示例:
type Person struct { Name string Age int } func (p Person) Greet() string { return fmt.Sprintf("Hello, my name is %s and I am %d years old.", p.Name, p.Age) } person := Person{Name: "Alice", Age: 30} greeting := person.Greet() fmt.Println(greeting) // 输出: Hello, my name is Alice and I am 30 years old.
2. 普通函数的接收者类型限制
- 普通函数示例:
func printValue(v int) { fmt.Println(v) } value := 42 printValue(value) // 正确 printValue(&value) // 错误,因为printValue接收的是值类型,而&value是引用类型
3. 方法的接收者类型灵活性
- 方法示例:
type Point struct { X int Y int } func (p Point) Distance() float64 { return math.Sqrt(float64(p.X*p.X + p.Y*p.Y)) } point := Point{X: 3, Y: 4} fmt.Println(point.Distance()) // 直接使用值类型调用方法 pointPtr := &Point{X: 3, Y: 4} fmt.Println((*pointPtr).Distance()) // 使用指针类型调用方法
方法内是否修改实例的值,取决于方法前置接受参数是值类型还是指针类型,如果前置接受参数类型是指针类型,即使传入的参数不是指针,也会修改实例的值
通过这些示例,你可以更好地理解Go语言中方法和函数的区别以及它们的调用方式。

浙公网安备 33010602011771号