放弃Wordpress后,我一直在试验Jekyll创建一个博客.我选择它(通过Ghost)来帮助我在博客时学习Web开发的基础知识.此外,GitHub页面上的免费托管是整洁和免费的.
什么是静态站点生成器(如Jekyll),为什么它们存在?
gRPC 的 Go 库提供了用于创建您自己的自定义拦截器(即中间件函数)的接口,我正在尝试编写两个日志拦截器。第一个是一元服务器拦截器,我可以使用传递到拦截器函数的对象轻松记录请求参数。
func loggingUnary(context context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
start := time.Now()
resp, err := handler(context, req)
printLogMessage(err, info.FullMethod, context, time.Since(start), req)
return resp, err
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能对流服务器拦截器做同样的事情,它不能方便地将请求对象作为参数传递?还有其他方法可以访问请求吗?
func loggingStream(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
start := time.Now()
err := handler(srv, stream)
printLogMessage(err, info.FullMethod, stream.Context(), time.Since(start), "")
return err
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找创建一个返回地图列表的 gRPC 响应。这是我想象的结构:
message GetSettingsResponse {
repeated map<string, string> settings = 1;
}
Run Code Online (Sandbox Code Playgroud)
但是,不支持重复映射,我必须将映射嵌套在单独的消息中才能使其工作:
message GetSettingsResponse {
repeated Setting settings = 1;
}
message Setting {
map<string, string> setting = 1;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它迫使我们在客户端和服务器上编写一些令人困惑的代码。有什么办法可以避免这种解决方案并更接近我想要的结构吗?
我正在使用Nokogiri搜索我从API收到的XML.
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.text
Run Code Online (Sandbox Code Playgroud)
但有时候,响应中缺少子元素(例如光纤).在这种情况下,Nokogiri返回一个nil对象,我的代码抛出相应的异常(未定义的方法`text'为nil:NilClass)因为我试图访问nil对象的'text'方法.
在实际尝试调用"text"方法之前,检查子元素(例如光纤)是否存在的干净而快速的方法是什么?如果它不存在,我想将值设置为0.我也在为其他几个子元素(例如卡路里,碳水化合物等)做这个.