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
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0