考虑一个简单的Circle
类型,它有一个方法来计算圆的面积。我们可以定义一个非指针接收器来读取圆的半径。
package main
import (
"fmt"
"math"
)
type Circle struct {
Radius float64
}
// 使用非指针接收器来计算面积
func (c Circle) Area() float64 {
return math.Pi * c.Radius * c.Radius
}
func main() {
c := Circle{Radius: 5}
fmt.Println("Area of the circle:", c.Area())
}
Area
方法使用了非指针接收器。这意味着每次调用Area
方法时,都会创建一个Circle
实例的副本。因此,方法内部对半径的任何修改都不会影响原始的Circle
实例。package main
import (
"fmt"
"math"
)
type Circle struct {
Radius float64
}
// 使用非指针接收器来计算面积
func (c Circle) Area() float64 {
return math.Pi * c.Radius * c.Radius
}
// 使用指针接收器来修改半径
func (c *Circle) SetRadius(newRadius float64) {
c.Radius = newRadius
}
func main() {
c := Circle{Radius: 5}
fmt.Println("Area of the circle:", c.Area())
c.SetRadius(10)
fmt.Println("New radius of the circle:", c.Radius)
fmt.Println("Updated area of the circle:", c.Area())
}
SetRadius
方法使用了指针接收器。这意味着方法内部可以直接修改原始的Circle
实例的半径。因此,调用SetRadius
方法后,c.Radius
的值会发生变化,并且这种变化会反映在后续调用Area
方法时计算的面积中。Matrix
类型,它代表一个矩阵,并定义两个方法:Add
和Multiply
。Add
方法将接收两个矩阵实例作为值传递的参数,并返回它们的和的新矩阵实例;而Multiply
方法将使用指针接收器来修改当前矩阵实例,并将另一个矩阵作为值传递参数来执行矩阵乘法。package main
import (
"fmt"
)
// Matrix 代表一个2x2的矩阵
type Matrix struct {
A, B, C, D float64
}
// Add 方法通过值传递参数,返回两个矩阵的和
func (m Matrix) Add(other Matrix) Matrix {
return Matrix{
A: m.A + other.A,
B: m.B + other.B,
C: m.C + other.C,
D: m.D + other.D,
}
}
// Multiply 方法通过指针接收器修改当前矩阵实例
// 并使用值传递参数来执行矩阵乘法
func (m *Matrix) Multiply(other Matrix) {
m.A = m.A*other.A + m.B*other.C
m.B = m.A*other.B + m.B*other.D
m.C = m.C*other.A + m.D*other.C
m.D = m.C*other.B + m.D*other.D
}
// String 方法为Matrix提供字符串表示,方便打印输出
func (m Matrix) String() string {
return fmt.Sprintf("[%.2f, %.2f; %.2f, %.2f]", m.A, m.B, m.C, m.D)
}
func main() {
matrix1 := Matrix{1, 2, 3, 4}
matrix2 := Matrix{4, 3, 2, 1}
fmt.Println("Original matrix 1:", matrix1.String())
fmt.Println("Original matrix 2:", matrix2.String())
// 使用 Add 方法,通过值传递参数,返回新的矩阵实例
sumMatrix := matrix1.Add(matrix2)
fmt.Println("Sum of matrix 1 and 2:", sumMatrix.String())
// 使用 Multiply 方法,通过指针接收器修改 matrix1
// 并使用值传递参数 matrix2 执行矩阵乘法
matrix1.Multiply(matrix2)
fmt.Println("Result of multiplying matrix 1 by 2:", matrix1.String())
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。