猿问

go语言中的静态类方法

我正在查看示例代码:https : //golang.org/pkg/net/rpc/


type Arith int


func (t *Arith) Multiply(args *Args, reply *int) error {

    *reply = args.A * args.B

    return nil

}

从 OOP 的角度来看,Multiply似乎是一个不访问Arith类中任何数据的静态方法;因为t未使用该变量。这是否意味着intintype Arith int没有任何意义?


蝴蝶不菲
浏览 633回答 2
2回答

暮色呼如

这与 OOP 没有任何关系,只是 rpc 包的约定通过从“对象”导出方法来工作(这里的对象表示具有非空方法集的任何值)该int是类型显著Arith,但它不是在这个特殊的例子显著,因为接收器从来没有在引用的方法。所以是的,这个例子有点像一个静态类,但尽量不要将 Java OOP 思想映射到 Go,因为 Go 非常不同,因为没有“类”或继承。

精慕HU

另一种调用模拟静态方法的方法,尽管事实并非如此,如下所示:package mainimport "fmt"type Arith struct {}func (Arith) Multiply(a float32, b float32) float32 {    return a * b}func main() {    result := (Arith).Multiply(Arith{}, 15, 25)    fmt.Println(result)}但从我的角度来看,这比将这个方法放在arith类之外的单独包中更难理解Arith
随时随地看视频慕课网APP

相关分类

Go
我要回答