Go-如何确保没有';是否通过gRPC在此代码中发送空字段?
我正在编写一些代码,用gRPC将日志发送到服务器。我遇到的问题是,日志是不同的,并不是所有日志都有每个字段,但是。我想知道如何只设置logpb.Log中的字段,而不在proto文件中创建几种不同类型的日志? 这都是一种方法,但StackOverflow上的格式设置与之不符。 守则:Go-如何确保没有';是否通过gRPC在此代码中发送空字段?,go,filtering,grpc,Go,Filtering,Grpc,我正在编写一些代码,用gRPC将日志发送到服务器。我遇到的问题是,日志是不同的,并不是所有日志都有每个字段,但是。我想知道如何只设置logpb.Log中的字段,而不在proto文件中创建几种不同类型的日志? 这都是一种方法,但StackOverflow上的格式设置与之不符。 守则: func (*Client) SendWithgRPC(entry *log.Entry) error { conn, err := grpc.Dial("localhost:50051", g
func (*Client) SendWithgRPC(entry *log.Entry) error {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("Could not connect: %v", err)
}
defer conn.Close()
c := logpb.NewLogServiceClient(conn)
stream, err := c.SendLogs(context.Background())
if err != nil {
log.Fatalf("Error while calling SendLogs: %v", err)
}
logFields := entry.Data
category := ""
debug_id := ""
request_id := ""
tipi := ""
uri := ""
var user_id int32 = 0
ip := ""
if logFields["category"] != nil {
category = logFields["category"].(string)
}
if logFields["debug_id"] != nil {
debug_id = logFields["debug_id"].(string)
}
if logFields["request_id"] != nil {
request_id = logFields["request_id"].(string)
}
if logFields["type"] != nil {
tipi = logFields["type"].(string)
}
if logFields["uri"] != nil {
uri = logFields["uri"].(string)
}
if logFields["user_id"] != nil {
user_id = int32(logFields["user_id"].(int))
}
if logFields["ip"] != nil {
ip = logFields["ip"].(string)
}
logEntry := &logpb.Log{
Time: entry.Time.String(),
Level: entry.Level.String(),
Msg: entry.Message,
Category: category,
DebugId: debug_id,
Ip: ip,
RequestId: request_id,
Type: tipi,
Uri: uri,
Id: user_id,
}
logs := []*logpb.Log{logEntry}
logarray := []*logpb.SendLogsRequest{
&logpb.SendLogsRequest{
Logs: logs,
},
}
fmt.Print(logarray)
for _, req := range logarray {
stream.Send(req)
}
_, err = stream.CloseAndRecv()
if err != nil {
fmt.Printf("Error with response: %v", err)
}
return nil
}
您可以使用类似
它提供了使用标记的验证。除了基本的验证之外,这个库还有很多内容。一定要去看看。
示例 尽可能简单:
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type Name struct {
First string `validate:"required"`
Last string
}
func main() {
validName := Name{First: "John"} // Last name is empty and is not required
invalidName := Name{Last: "Doe"} // first name is empty but is required
validate := validator.New()
err := validate.Struct(invalidName)
if err != nil {
fmt.Println("invalid name struct caused error")
}
err = validate.Struct(validName)
if err != nil {
fmt.Println("valid name struct caused error")
}
fmt.Println("GoodBye")
}
以上的输出:
invalid name struct caused error
GoodBye
围棋场工作守则: