go语言

时间:2016-01-03 18:50:02

标签: oop 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。这是否意味着int中的type Arith int没有任何意义?

2 个答案:

答案 0 :(得分:4)

这与OOP没有任何关系,只是rpc包的约定通过从“对象”导出方法来实现(这里的对象意味着具有非空方法集的任何值)

User作为int的类型很重要,但在此特定示例中并不重要,因为接收器从未在方法中引用。

所以是的,这个例子有点像静态类,但是尽量不将Java OOP思想映射到Go,因为Go是非常不同的,因为没有“类”或继承。

答案 1 :(得分:0)

另一种调用模拟静态方法的方法(尽管事实并非如此)如下:

package main

import "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中要难理解