При попытке ссылаться на структуру как указатель.Это приведет к невозможности передачи литералов для регистрации службы.
Я полагаю, что это может быть связано с тем, как grpc изменился в разных версиях, так как раньше я мог заставить его работать таким образом ...Но установка свежей версии grpc привела к тому, что она не работает.
Я попытался создать новую структуру.Но вы получите нарушение адреса памяти.Я также попытался передать саму фактическую структуру без удачи.
Источник
package rpc
import (
"context"
"fmt"
"log"
"net"
"time"
"atomic-swaps/src/api"
"google.golang.org/grpc"
)
// ApiServer : Empty API server struct
type ApiServer struct{}
// Server : The Server endpoint response
func (s *ApiServer) Server(ctx context.Context, message api.ServerMessage) (*api.ServerMessage, error) {
ping := "pong"
time := int64(time.Now().Unix())
return &api.ServerMessage{ping, time, struct{}{}, nil, 128}, nil
}
// StartGRPCServer : Starts a fresh GRPC Server on TCP
func StartGRPCServer(port string) {
tcp, err := net.Listen("tcp", ":"+port)
if err != nil {
log.Fatalf("Error starting GRPC Server: %v", err)
}
server := grpc.NewServer()
api.RegisterApiServer(server, &ApiServer{})
fmt.Println("Starting gRPC server on " + port)
server.Serve(tcp)
}
Ошибка
src/rpc/grpc.go:33:32: cannot use &ApiServer literal (type *ApiServer) as type api.ApiServer in argument to api.RegisterApiServer:
*ApiServer does not implement api.ApiServer (wrong type for Server method)
have Server(context.Context, api.ServerMessage) (*api.ServerMessage, error)
want Server(context.Context, *api.ServerMessage) (*api.ServerMessage, error)