返回顶部
首页 > 资讯 > 后端开发 > GO >创建具有重复字段的 grpc 客户端请求时内存地址无效
  • 257
分享到

创建具有重复字段的 grpc 客户端请求时内存地址无效

2024-04-05 00:04:28 257人浏览 薄情痞子
摘要

golang不知道大家是否熟悉?今天我将给大家介绍《创建具有重复字段的 grpc 客户端请求时内存地址无效》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希

golang不知道大家是否熟悉?今天我将给大家介绍《创建具有重复字段的 grpc 客户端请求时内存地址无效》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我的 grpc 服务器和客户端有问题,我正在尝试在 grpc 中创建重复字段并将其发送到客户端。但它因错误而失败,我在 grpc 客户端/服务器上做错了什么?我尝试将 requestscommand 作为值发送,但这不起作用。

panic: runtime error: invalid memory address or nil pointer dereference
[signal sigsegv: segmentation violation code=0x1 addr=0x20 pc=0x165cf0e]

Goroutine 40 [running]:
main.(*server).runcommands(0x172b960?, {0x18be540?, 0xc00031c030?}, 0x107a360?)
        <autogenerated>:1 +0x2e
GitHub.com/mygithub/some-package/proto._executerservice_runcommands_handler({0x1701a20?, 0xc0002430d0}, {0x18be540, 0xc00031c030}, 0xc000318070, 0x0)
        ..../executer_grpc.pb.go:93 +0x170

executer_grpc.pb.go:93 是:

in := new(commandsrequest)
return srv.(executerserviceserver).runcommands(ctx, in)

在服务器端我有以下内容:

grpc_server.go:

package main

import (
    "fmt"
    pb "github.com/mygithub/some-package/proto"
    "google.golang.org/grpc"
)


type server struct {
    pb.executerserviceserver
}

func startserver() {
    addr := getagentaddress()
    lis, err := net.listen("tcp", addr)

    if err != nil {
        log.fatalf("faild to listen on %v\n", err)
    }
    s := grpc.newserver()
    pb.reGISterexecuterserviceserver(s, &server{})

    if err = s.serve(lis); err != nil {
        log.fatalf("failed to serve: %v\n", err)
    }

}

grpc_client.go:

package main

import (
    "context"
    "encoding/JSON"
    "fmt"
    v1 "github.com/mygithub/some-package/api/v1"
    pb "github.com/mygithub/some-package/proto"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
)

func sendcommandswithclient() (string, error) {
    command := v1.commandspec{
        bashcommand: "ls",
        async:       false,
    }

    addr := "localhost:4000"
    conn, err := grpc.dial(addr, grpc.withtransportcredentials(insecure.newcredentials()))
    if err != nil {
        return "", err
    }

    defer conn.close()
    client := pb.newexecuterserviceclient(conn)
    if err != nil {
        return "", err
    }

    commandrequest := &pb.commandrequest{
        bashcommand: command.bashcommand,
        slug:        "test",
        async:       command.async,
    }

    req := &pb.commandsrequest{}
    req.commands = append(req.commands, commandrequest)
    aasjsonstring, _ := json.marshal(req)
    fmt.println(string(aasjsonstring))
    res, err := client.runcommands(context.background(), req)

    if err != nil {
        return "", err
    }
    return res.content, nil
}

func main() {
    _, err := sendcommandswithclient()
    if err != nil {
        return
    }
}

运行命令:

func (s *Server) RunCommands(ctx context.Context, in *pb.CommandsRequest) (*pb.CommandsResponse, error) {
    log.Println("test")
    command := v1.CommandSpec{BashCommand: "ls", Slug: "test", Async: true}
    CommandsQueue := append(CommandsQueue, command)
    size := len(CommandsQueue)
    return &pb.CommandsResponse{Status: 0, Content: strconv.Itoa(size)}, nil
}

go版本:go版本go1.18.2 darwin/amd64 协议:proto3


正确答案


您应该使用所有 go 文件来构建或运行。

go run main.go model.go somefile.go

今天关于《创建具有重复字段的 grpc 客户端请求时内存地址无效》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: 创建具有重复字段的 grpc 客户端请求时内存地址无效

本文链接: https://lsjlt.com/news/596431.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 创建具有重复字段的 grpc 客户端请求时内存地址无效
    Golang不知道大家是否熟悉?今天我将给大家介绍《创建具有重复字段的 grpc 客户端请求时内存地址无效》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希...
    99+
    2024-04-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作