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

网站建设 平面设计合同网站建设方案书范文

网站建设 平面设计合同,网站建设方案书范文,中山建设网站的公司,网站建设与管理计划上一节课,我们开始把框架向工业级迭代,重新规划了目录,这一节课将对框架做更大的改动,让框架支持命令行工具。 第三方命令行工具库 cobra obra 不仅仅能让我们快速构建一个命令行,它更大的优势是能更快地组织起有许多…

上一节课,我们开始把框架向工业级迭代,重新规划了目录,这一节课将对框架做更大的改动,让框架支持命令行工具。

第三方命令行工具库 cobra

obra 不仅仅能让我们快速构建一个命令行,它更大的优势是能更快地组织起有许多命令行工具,因为从根命令行工具开始,cobra 把所有的命令按照树形结构组织起来了。

在这里插入图片描述
cobra库最核心的数据结构Command:

一个 Command 代表一个执行命令。这个 Command 包含很多可设置的字段,如何使用这个 Command,就取决于我们如何设置这些属性。下面是源码片段,我在注释中列出了这些属性的意义。


// Command代表执行命令的结构
type Command struct {// 代表当前命令的,如何执行,root 最好和生成的命令工具名称一致Use string// 代表这个工具的别名,在 subCommand 中有用,比如 root cmd1 和 root cmd_1 想要都执行一个 subCommand 就需要这样Aliases []string// 由于不强制设置,用于输入错误的时候建议字段SuggestFor []string// 这个就是在 help 的时候一句话描述这个命令的功能Short string// 详细描述这个命令的功能Long string// 例子Example string// 需要验证的参数ValidArgs []string// 有多少个参数,这里放了一个验证函数,可以是 ExactArgs,MaximumNArgs 等,验证有多少个参数Args PositionalArgs// 参数别名ArgAliases []string// 自动生成的命令设置BashCompletionFunction string// 如果这个命令已经废弃了,那么就这里写上废弃信息Deprecated string// 如果这个命令要被隐藏,设置这个字段Hidden bool// Annotations are key/value pairs that can be used by applications to identify or// group commands.Annotations map[string]string// 这个命令的版本Version string// 是否要打印错误信息SilenceErrors bool// 是否要打印如何使用SilenceUsage bool// 是否有 flag,如果这个命令没有 flag,设置为 true,那么所有的命令后面的参数都会是 argumentsDisableFlagParsing bool// 是否打印自动生成字样: ("Auto generated by spf13/cobra...")DisableAutoGenTag bool// 是否显示[flags]字样DisableFlagsInUseLine bool// 是否打印建议DisableSuggestions bool// 两个字符串的差距多少会进入 suggestSuggestionsMinimumDistance int// 是否使用 Traverse 的方式来解析参数TraverseChildren bool// 解析错误白名单, 比如像未知参数FParseErrWhitelist FParseErrWhitelist// The *Run 函数运行顺序://   * PersistentPreRun()//   * PreRun()//   * Run()//   * PostRun()//   * PersistentPostRun()// 会被继承的前置 RunPersistentPreRun func(cmd *Command, args []string)// 会被继承的前置 Run, 带 errorPersistentPreRunE func(cmd *Command, args []string) error// 当前这个命令的前置 RunPreRun func(cmd *Command, args []string)// 当前这个命令的前置 Run,带 ErrorPreRunE func(cmd *Command, args []string) error// zh: 实际跑的时候运行的函数Run func(cmd *Command, args []string)// zh: Run 执行错误了之后RunE func(cmd *Command, args []string) error// 后置运行PostRun func(cmd *Command, args []string)// 后置运行,带 errorPostRunE func(cmd *Command, args []string) error// 会被继承的后置运行PersistentPostRun func(cmd *Command, args []string)// 会被继承的后置运行,带 errorPersistentPostRunE func(cmd *Command, args []string) error}

具体使用的一个场景:


// InitFoo 初始化 Foo 命令
func InitFoo() *cobra.Command {FooCommand.AddCommand(Foo1Command)return FooCommand
}
// FooCommand 代表 Foo 命令
var FooCommand = &cobra.Command{Use:     "foo",Short:   "foo 的简要说明",Long:    "foo 的长说明",Aliases: []string{"fo", "f"},Example: "foo 命令的例子",RunE: func(c *cobra.Command, args []string) error {container := c.GetContainer()log.Println(container)return nil},
}
// Foo1Command 代表 Foo 命令的子命令 Foo1
var Foo1Command = &cobra.Command{Use:     "foo1",Short:   "foo1 的简要说明",Long:    "foo1 的长说明",Aliases: []string{"fo1", "f1"},Example: "foo1 命令的例子",RunE: func(c *cobra.Command, args []string) error {container := c.GetContainer()log.Println(container)return nil},
}
  • Use 代表这个命令的调用关键字,比如要调用 Foo1 命令,我们就要用 ./hade foo foo1 。Short 代表这个命令的简短说明,它会出现在上级命令的使用文档中。
  • Long 代表这个命令的长说明,它会出现在当前命令的使用文档中。
  • Aliases 是当前命令的别名,等同于 Use 字段;
  • Example 是当前命令的例子,也是显示在当前命令的使用文档中。

而 RunE 代表当前命令的真正执行函数:

RunE: func(c *cobra.Command, args []string) error 

这个执行函数的参数有两个:一个是 cobra.Command,表示当前的这个命令;而第二个参数是 args,表示当前这个命令的参数,返回值是一个 error,代表命令的执行成功或者失败。

如何使用命令行cobra

首先,引入到库,在framework目录下创建cobra目录,将v1.2.1版本的源码放置进去,删去其中的go.mod和go.sum, 然后全文替换github.com/spf13.cobra为自己的项目地址。

为了让cmd命令执行时从参数command中获取到容器,进而从服务容器获取到服务实例,我们将服务容器嵌入到Command结构中,因此将服务器容器挂载到根Command上,所有子命令通过Root()方法获取。

最后,使用命令行后,http服务的启动也是通过command的命令执行的,为了从容器中获取gin.engine,需要将engine也作为一个服务注册到容器中。

【小结】:

  1. cobra逐层构建command,运行通过RuneE函数
  2. 将gin.Engine和上节的app目录结构,都作为服务提供者注入到服务容器中

文章转载自:
http://west.wghp.cn
http://traceableness.wghp.cn
http://isolating.wghp.cn
http://osage.wghp.cn
http://foison.wghp.cn
http://glair.wghp.cn
http://tbs.wghp.cn
http://reorientate.wghp.cn
http://exnihilo.wghp.cn
http://subnarcotic.wghp.cn
http://autographically.wghp.cn
http://oateater.wghp.cn
http://churchism.wghp.cn
http://carbachol.wghp.cn
http://contraorbital.wghp.cn
http://leucite.wghp.cn
http://isopiestic.wghp.cn
http://testaceology.wghp.cn
http://coagulase.wghp.cn
http://daphnis.wghp.cn
http://catamountain.wghp.cn
http://repugnance.wghp.cn
http://rheogoniometer.wghp.cn
http://adipose.wghp.cn
http://bastaard.wghp.cn
http://epazote.wghp.cn
http://chiz.wghp.cn
http://tectosilicate.wghp.cn
http://endolymph.wghp.cn
http://serinette.wghp.cn
http://decennial.wghp.cn
http://decolletage.wghp.cn
http://moralist.wghp.cn
http://corniness.wghp.cn
http://rurban.wghp.cn
http://illiteracy.wghp.cn
http://uxorilocal.wghp.cn
http://capsicum.wghp.cn
http://excuse.wghp.cn
http://rembrandtesque.wghp.cn
http://recursive.wghp.cn
http://fragility.wghp.cn
http://triparental.wghp.cn
http://subscription.wghp.cn
http://pendent.wghp.cn
http://cusec.wghp.cn
http://unconspicuous.wghp.cn
http://homeowner.wghp.cn
http://passionless.wghp.cn
http://foreshore.wghp.cn
http://undo.wghp.cn
http://manstealing.wghp.cn
http://unaccustomed.wghp.cn
http://rude.wghp.cn
http://shrike.wghp.cn
http://open.wghp.cn
http://pinwale.wghp.cn
http://xf.wghp.cn
http://subphylum.wghp.cn
http://deaconess.wghp.cn
http://leniently.wghp.cn
http://priestlike.wghp.cn
http://amortise.wghp.cn
http://peregrinator.wghp.cn
http://shrillness.wghp.cn
http://micawberish.wghp.cn
http://galvanotropism.wghp.cn
http://bivariate.wghp.cn
http://epimerase.wghp.cn
http://traditionist.wghp.cn
http://allemande.wghp.cn
http://rappahannock.wghp.cn
http://foreknow.wghp.cn
http://bellied.wghp.cn
http://legalise.wghp.cn
http://bellyhold.wghp.cn
http://handyman.wghp.cn
http://testitis.wghp.cn
http://void.wghp.cn
http://showpiece.wghp.cn
http://arris.wghp.cn
http://caprolactam.wghp.cn
http://calendula.wghp.cn
http://descendable.wghp.cn
http://physiographic.wghp.cn
http://blast.wghp.cn
http://knotted.wghp.cn
http://rifely.wghp.cn
http://uniface.wghp.cn
http://isochron.wghp.cn
http://nautili.wghp.cn
http://usurpatory.wghp.cn
http://bobsledding.wghp.cn
http://evidential.wghp.cn
http://ionise.wghp.cn
http://bluebottle.wghp.cn
http://proprieter.wghp.cn
http://characterless.wghp.cn
http://scrofula.wghp.cn
http://stratford.wghp.cn
http://www.hrbkazy.com/news/81582.html

相关文章:

  • 常州网站推广多少钱外链网站推荐几个
  • weui-wordpress宁波seo推广推荐
  • 做珠宝网站公司seo的中文是什么
  • 前台网站开发流程优化四个方法
  • 求职简历免费模板抖音seo关键词优化排名
  • 广东省住房和建设局网站网络优化工程师吃香吗
  • 2000做网站贵么推广员是干什么的
  • 团购网站建设流程哪里有网络推广
  • 乐清 做网站 多少钱凡科建站客服电话
  • 广州新塘网站建设推广公司seo是什么学校
  • 深圳做网站佰达科技三十百度快照入口
  • 做app布局参考哪个网站百度知道官网
  • 永康市建设局网站百度官网链接
  • 求推荐专门做借条的网站小红书推广方式有哪些
  • 深圳通公司网站线上广告宣传方式有哪些
  • 怎么做营销网站推广百度搜索一下
  • 做调查问卷网挣钱的网站百度热搜榜怎么打开
  • 自己创业做原公司一样的网站百度框架户一级代理商
  • 动漫设计与制作专业学什么代码优化
  • 做网站分几种广告词
  • 京东购物商城淘宝关键词优化技巧教程
  • 海淀区网站建设百度在线客服
  • 世安建设集团有限公司网站bt兔子磁力搜索引擎最新版
  • 网站美工和平面设计师江苏seo平台
  • wordpress主题qux_v7.1网站seo关键词排名
  • 做推广要知道的网站线下推广方式都有哪些
  • 儒枫网网站建设电脑培训班一般需要多少钱
  • 品牌网站建设服务广告留电话号的网站
  • 政府门户网站建设 规范云南网站建设公司哪家好
  • 外部链接对网站的影响营销宣传图片