Go添加自定义操作符<等符号?

发布时间 2023-09-07 13:46:55作者: tangjicheng

不,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 设计者们所倾向的。