Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于指针接收器,无法实现Go接口_Go - Fatal编程技术网

由于指针接收器,无法实现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 type
T
声明的所有方法组成。方法集 对应指针类型的
*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{}