当前位置: 首页 > news >正文

知道网站是wp程序做的如何仿站网站建设平台怎么样

知道网站是wp程序做的如何仿站,网站建设平台怎么样,各大电商平台对比,上传wordpress到文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施#xff0c;不限定于某种注册中心#xff0c;或数据库ORM等#xff0c;所以您可以十分轻松地将任意库集成进项目里#xff0c;与Kratos共同运作。 API -不限定于某种注册中心或数据库ORM等所以您可以十分轻松地将任意库集成进项目里与Kratos共同运作。 API - Service(wire) - DB 可以看到kratos将整个服务大体分为了3层API / Service / DB。左侧标注了在 Service和DB层使用依赖注入DI进行实现工具名称为Wire。可以看到Wire这个工具几乎贯穿Kratos架构始终是一个大角色。 2.传输协议 支持http grpc两种调用方式通过编写proto文件来实现。 一般http开放给外部调用可以使用restful风格定义。grpc面向内部微服务之间进行调用。 ​ 在项目中会以这样的结构出现并且可以对不同协议进来的请求进行处理添加处理的中间件如权限校验、熔断限流等等。 3.日志 在kratos中可以自定义日志框架选型设置日志格式和输出内容然后将logger对象以依赖注入的方式分配给server中的grpc server和http server这样就可以实现每次收到请求后的日志打印。 将logger对象以依赖注入的方式注入到业务层就可以在业务层中统一使用logger进行输出。 4.错误处理 在grpc中比较通用的一种错误处理方式就是直接通过 proto 预定义定义错误码然后通过 proto-gen-go 生成帮助代码直接返回 error。 {// 错误码跟 http-status 一致并且在 grpc 中可以转换成 grpc-statuscode: 500,// 错误原因定义为业务判定错误码reason: USER_NOT_FOUND,// 错误信息为用户可读的信息可作为用户提示内容message: invalid argument error,// 错误元信息为错误添加附加可扩展信息metadata: {foo: bar} }这里可以发现为了兼容grpc在http的返回结果中code也无法自定义只能跟随httpcode。所以这里客户端或者第三方去处理错误时需要判断reason字段。 5.配置管理 使用proto文件定义配置和生成struct然后将yaml中的内容读取到对应struct 字段中进行使用。 在这里我们可以注意到在kratos中除了传输格式使用了proto进行定义之外错误处理和配置管理也使用了proto来进行。可以说一切皆proto。 6.wire Wire 是一个灵活的依赖注入工具需要安装通过自动生成代码的方式在编译期完成依赖注入。通过 Wire 进行初始化代码可以很好地解决组件之间的耦合以及提高代码维护性。 打开Kratos的示例项目从main入口看有一处调用了wireApp方法这里就是一切的源头万恶之源。 这个方法调用的是main同目录的wire文件中的wireApp方法同目录的wire_gen.go实现了此方法。 wire_gen中去实例化不同service和组建的对象用于调用。关系图如下 server - service - biz - data main.go - wire.go(wire_gen.go) wire.go 中有用到ProviderSet package mainimport (kratos-demo03/internal/bizkratos-demo03/internal/confkratos-demo03/internal/datakratos-demo03/internal/serverkratos-demo03/internal/servicegithub.com/go-kratos/kratos/v2github.com/go-kratos/kratos/v2/loggithub.com/google/wire )// wireApp init kratos application. func wireApp(*conf.Server, *conf.Data, log.Logger) (*kratos.App, func(), error) {panic(wire.Build(server.ProviderSet, data.ProviderSet, biz.ProviderSet, service.ProviderSet, newApp)) }main.go 有用到App和Config package mainimport (flagoskratos-demo03/internal/confgithub.com/go-kratos/kratos/v2github.com/go-kratos/kratos/v2/configgithub.com/go-kratos/kratos/v2/config/filegithub.com/go-kratos/kratos/v2/loggithub.com/go-kratos/kratos/v2/middleware/tracinggithub.com/go-kratos/kratos/v2/transport/grpcgithub.com/go-kratos/kratos/v2/transport/http_ go.uber.org/automaxprocs )// go build -ldflags -X main.Versionx.y.z var (// Name is the name of the compiled software.Name string// Version is the version of the compiled software.Version string// flagconf is the config flag.flagconf stringid, _ os.Hostname() )func init() {flag.StringVar(flagconf, conf, ../../configs, config path, eg: -conf config.yaml) }func newApp(logger log.Logger, gs *grpc.Server, hs *http.Server) *kratos.App {return kratos.New(kratos.ID(id),kratos.Name(Name),kratos.Version(Version),kratos.Metadata(map[string]string{}),kratos.Logger(logger),kratos.Server(gs,hs,),) }func main() {flag.Parse()logger : log.With(log.NewStdLogger(os.Stdout),ts, log.DefaultTimestamp,caller, log.DefaultCaller,service.id, id,service.name, Name,service.version, Version,trace.id, tracing.TraceID(),span.id, tracing.SpanID(),)c : config.New(config.WithSource(file.NewSource(flagconf),),)defer c.Close()if err : c.Load(); err ! nil {panic(err)}var bc conf.Bootstrapif err : c.Scan(bc); err ! nil {panic(err)}app, cleanup, err : wireApp(bc.Server, bc.Data, logger)if err ! nil {panic(err)}defer cleanup()// start and wait for stop signalif err : app.Run(); err ! nil {panic(err)} }在每个模块中只需要一个 ProviderSet 提供者集合就可以在 wire 中进行依赖注入。 有一个数据库连接对象service需要操作数据库依赖数据库连接对象。这时候我们可以声明数据库连接对象在ProviderSet集合然后在service对象处声明我需要一个数据库连接对象。 然后我们使用wire工具就可以自动帮我们生成依赖注入的代码。 这里的依赖注入让代码间的依赖关系一目了然。只需要查看wire_gen.go代码就可以了解依赖关系。
http://www.tj-hxxt.cn/news/130974.html

相关文章:

  • 网站后期维护是做什么网络营销模式下品牌推广途径
  • 鑫菲互动网站建设公司河南省住房城乡和建设厅网站
  • 京东商城网站风格创个网站怎么弄
  • 二元期货交易网站开发建设信用卡积分兑换商城网站
  • 算命网站怎么做微信公众号网页版登录入口
  • 做网站不挣钱茶叶市场网站建设方案
  • 手机网站运营成都网站制作培训多少钱
  • 网站的策划做推广电子商务网站建站
  • 网站做下载wordwordpress 设置footer
  • 月嫂的个人简历网站模板平面设计学徒
  • 重庆哪里有做网络推广网站配置优化
  • 济南高新区 网站建设公司做任务转比特币的网站
  • 平顶山网站建设费用工作总结开头
  • 企业网站报价方案下载建设银行 公户 该网站使用过期的
  • 如何在百度做网站推广wordpress禁止某ip
  • 如何建设一个文件分享网站seo静态页源码
  • 网站建设情况说明网页设计的网网页设计的网站
  • 南京装饰公司网站建设流量精灵
  • 网站开发标准建设网站的软件
  • 企业官网网站建设报价安装discuz x 3.1 网站虚拟主机的要求
  • 小程序网站建设y021长沙网站建设费用
  • 满城区城乡建设局网站百度竞价推广代运营话术
  • 无锡网站关键词优化软件咨询广告营销案例100例
  • 福州建设人才网站南京知名网站建设公司
  • 广东汽车品牌网站建设长沙网上商城开发
  • 想自己做个公司网站不知道怎么做阿里云备案 网站备案域名
  • 西安网站设计开发人才淘宝客 wordpress网站
  • 大理网上商城网站建设新浪网站用什么语言做的
  • 摄影作品投稿网站学做网站论坛vip共享
  • 网站开发用什么工具好英文网站标题字体