不,Go 语言不支持自定义操作符或重载内置操作符的行为,与 C++ 的 operator
重载不同。Go 的设计者们故意避免了操作符重载以保持语言的简单性。
但是,你可以为你的自定义 struct
定义方法来实现类似的功能,只不过这些方法不会使用操作符的语法。
例如,假设你有一个 Vector
结构体,而你想比较两个 Vector
的大小。在 C++ 中,你可能会重载 <
操作符。在 Go 中,你可以这样做:
package main
import "fmt"
type Vector struct {
x, y float64
}
// LessThan 方法返回 true 如果当前 Vector 小于给定的 Vector。
func (v Vector) LessThan(other Vector) bool {
return v.x*v.x+v.y*v.y < other.x*other.x+other.y*other.y
}
func main() {
v1 := Vector{3, 4}
v2 := Vector{1, 7}
fmt.Println(v1.LessThan(v2)) // 输出: false
}
虽然这不如操作符语法那样简洁,但它使得代码更加明确和可读,这是 Go 设计者们所倾向的。