我正在查看示例代码: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
没有任何意义?
答案 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
中要难理解