由于指针接收器,无法实现Go接口
我的由于指针接收器,无法实现Go接口,go,Go,我的go测试无法通过。发生了什么?(Handle方法有指针接收器)的含义是什么 当我运行go test ipc\u test.go /ipc_test.go:49: cannot use server (type EchoServer) as type Server in argument to NewIpcServer: EchoServer does not implement Server (Handle method has pointer receiver) FAIL c
go测试
无法通过。发生了什么?(Handle方法有指针接收器)的含义是什么
当我运行go test ipc\u test.go
/ipc_test.go:49: cannot use server (type EchoServer) as type Server in argument to NewIpcServer:
EchoServer does not implement Server (Handle method has pointer receiver)
FAIL command-line-arguments [build failed]
NewIpcServer
接收可由值类型或指针类型满足的接口
由于EchoServer
实现了作为指针式接收器的接口功能(例如func(server*EchoServer)…
),因此必须将指针传递给NewIpcServer
功能
在您的TestIpc
功能中,将server
更改为指针
server := new(EchoServer)
您的测试应该可以正常编译。1-您可以使用
server := &EchoServer{}
而不是
server := EchoServer{}
server := EchoServer{}
:
类型可能有与其关联的方法集。方法集
接口类型是它的接口。任何其他类型的方法集T
由使用receiver typeT
声明的所有方法组成。方法集
对应指针类型的*T
是所有方法的集合
用receiver*T
或T
声明(也就是说,它还包含方法
一套T
)。进一步的规则适用于包含匿名字段的结构,
如结构类型一节所述。任何其他类型都有一个
空方法集。在方法集中,每个方法必须具有唯一的
非空方法名
请参阅:
2-或者您可以使用
func (server EchoServer) Name() string {
return "EchoServer"
}
func (server EchoServer) Handle(method, params string) *Response {
return &Response{"OK", "Echo " + method + " " + params}
}
与
server := EchoServer{}